feat: implement naming convention, deployment automation, and infrastructure updates

- Add comprehensive naming convention (provider-region-resource-env-purpose)
- Implement Terraform locals for centralized naming
- Update all Terraform resources to use new naming convention
- Create deployment automation framework (18 phase scripts)
- Add Azure setup scripts (provider registration, quota checks)
- Update deployment scripts config with naming functions
- Create complete deployment documentation (guide, steps, quick reference)
- Add frontend portal implementations (public and internal)
- Add UI component library (18 components)
- Enhance Entra VerifiedID integration with file utilities
- Add API client package for all services
- Create comprehensive documentation (naming, deployment, next steps)

Infrastructure:
- Resource groups, storage accounts with new naming
- Terraform configuration updates
- Outputs with naming convention examples

Deployment:
- Automated deployment scripts for all 15 phases
- State management and logging
- Error handling and validation

Documentation:
- Naming convention guide and implementation summary
- Complete deployment guide (296 steps)
- Next steps and quick start guides
- Azure prerequisites and setup completion docs

Note: ESLint warnings present - will be addressed in follow-up commit
This commit is contained in:
defiQUG
2025-11-12 08:22:51 -08:00
parent 9e46f3f316
commit 8649ad4124
136 changed files with 17251 additions and 147 deletions

View File

@@ -0,0 +1,31 @@
'use client';
import { useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { useAuth } from '../lib/auth';
export function AuthGuard({ children }: { children: React.ReactNode }) {
const { isAuthenticated, isLoading } = useAuth();
const router = useRouter();
useEffect(() => {
if (!isLoading && !isAuthenticated) {
router.push('/login');
}
}, [isAuthenticated, isLoading, router]);
if (isLoading) {
return (
<div className="min-h-screen flex items-center justify-center">
<p className="text-gray-600">Loading...</p>
</div>
);
}
if (!isAuthenticated) {
return null;
}
return <>{children}</>;
}

View File

@@ -0,0 +1,54 @@
'use client';
import Link from 'next/link';
import { useRouter } from 'next/navigation';
import { Button } from '@the-order/ui';
import { useAuth } from '../lib/auth';
export function Header() {
const router = useRouter();
const { isAuthenticated, user, logout } = useAuth();
const handleLogout = () => {
logout();
router.push('/login');
};
return (
<header className="border-b bg-white">
<div className="container mx-auto px-4 py-4">
<div className="flex items-center justify-between">
<Link href="/" className="text-2xl font-bold text-gray-900">
The Order - Internal
</Link>
<nav className="flex items-center gap-4">
<Link href="/review" className="text-gray-600 hover:text-gray-900">
Review
</Link>
<Link href="/credentials" className="text-gray-600 hover:text-gray-900">
Credentials
</Link>
<Link href="/metrics" className="text-gray-600 hover:text-gray-900">
Metrics
</Link>
<Link href="/audit" className="text-gray-600 hover:text-gray-900">
Audit
</Link>
{isAuthenticated ? (
<div className="flex items-center gap-4">
<span className="text-sm text-gray-600">{user?.email || user?.name || 'Admin'}</span>
<Button variant="outline" size="sm" onClick={handleLogout}>
Logout
</Button>
</div>
) : (
<Link href="/login">
<Button variant="outline" size="sm">Login</Button>
</Link>
)}
</nav>
</div>
</div>
</header>
);
}