Passo 8 completo. Tudo verde. Sumário do que foi feito:
Novas páginas:
app/select-operator/page.tsx — Server Component; redireciona automaticamente se já há sessão; lista operadores via prisma direto (funciona mesmo sem sessão ativa)
app/select-operator/operator-picker.tsx — Client Component; tap → signIn('credentials', { email, redirect: false }) → redireciona para /
app/sign-out-button.tsx — botão "Trocar" que chama signOut → volta ao picker
middleware.ts atualizado — redireciona para /select-operator quando não há sessão e AUTH_DEV_AUTOLOGIN=false; skip automático se já logado; o picker não faz redirect se não há sessão (deixa carregar)
app/page.tsx atualizado — mostra chip com o email do utilizador atual + botão "Trocar" (necessário para o AC "header mostra op1@demo.local")
Correções de infraestrutura descobertas:
NODE_ENV="development" removido do .env — estava a forçar o runtime de dev no next build, quebrando a geração estática
pages/_error.tsx adicionado — override mínimo que previne o erro <Html> outside _document
@repo/storage adicionado a transpilePackages e AWS SDK marcado como serverExternalPackages
app/not-found.tsx + app/error.tsx adicionados para App Router
AC verificado: build de produção passa limpo em Next.js 15.3.9 com todas as rotas correctas. O fluxo demo (/ → picker → login → / mostra email) funciona via dev server.
47 lines
1.3 KiB
JSON
47 lines
1.3 KiB
JSON
{
|
|
"name": "@repo/operator-pwa",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "dotenv -e ../../.env -- next dev --port 3000",
|
|
"build": "dotenv -e ../../.env -- next build",
|
|
"start": "dotenv -e ../../.env -- next start --port 3000",
|
|
"lint": "next lint",
|
|
"typecheck": "tsc --noEmit",
|
|
"clean": "rimraf .next .turbo node_modules"
|
|
},
|
|
"dependencies": {
|
|
"@repo/api": "workspace:*",
|
|
"@repo/db": "workspace:*",
|
|
"@repo/domain": "workspace:*",
|
|
"@repo/ui": "workspace:*",
|
|
"@t3-oss/env-nextjs": "^0.11.1",
|
|
"@tanstack/react-query": "^5.62.10",
|
|
"@trpc/client": "^11.0.0",
|
|
"@trpc/react-query": "^11.0.0",
|
|
"@trpc/server": "^11.0.0",
|
|
"lucide-react": "^0.469.0",
|
|
"next": "15.3.9",
|
|
"next-auth": "5.0.0-beta.25",
|
|
"pino": "^9.5.0",
|
|
"pino-pretty": "^11.3.0",
|
|
"react": "^19.0.0",
|
|
"react-dom": "^19.0.0",
|
|
"superjson": "^2.2.2",
|
|
"zod": "^3.24.1"
|
|
},
|
|
"devDependencies": {
|
|
"@repo/config": "workspace:*",
|
|
"@types/node": "^22.10.2",
|
|
"@types/react": "^19.0.2",
|
|
"@types/react-dom": "^19.0.2",
|
|
"autoprefixer": "^10.4.20",
|
|
"dotenv-cli": "^8.0.0",
|
|
"postcss": "^8.4.49",
|
|
"rimraf": "^6.0.1",
|
|
"tailwindcss": "^3.4.17",
|
|
"typescript": "^5.7.2"
|
|
}
|
|
}
|