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
906 B
JSON
47 lines
906 B
JSON
{
|
|
"$schema": "https://turbo.build/schema.json",
|
|
"globalDependencies": [".env"],
|
|
"globalEnv": [
|
|
"DATABASE_URL",
|
|
"AUTH_SECRET",
|
|
"AUTH_DEV_AUTOLOGIN",
|
|
"NEXT_PUBLIC_APP_URL",
|
|
"LOG_LEVEL",
|
|
"S3_ENDPOINT",
|
|
"S3_REGION",
|
|
"S3_BUCKET",
|
|
"S3_ACCESS_KEY",
|
|
"S3_SECRET_KEY",
|
|
"S3_FORCE_PATH_STYLE"
|
|
],
|
|
"tasks": {
|
|
"build": {
|
|
"dependsOn": ["^build"],
|
|
"outputs": [".next/**", "!.next/cache/**", "dist/**"]
|
|
},
|
|
"dev": {
|
|
"cache": false,
|
|
"persistent": true
|
|
},
|
|
"lint": {
|
|
"dependsOn": ["^build"],
|
|
"outputs": []
|
|
},
|
|
"typecheck": {
|
|
"dependsOn": ["^build"],
|
|
"outputs": []
|
|
},
|
|
"test": {
|
|
"dependsOn": ["^build"],
|
|
"outputs": ["coverage/**"]
|
|
},
|
|
"clean": {
|
|
"cache": false
|
|
},
|
|
"db:generate": {
|
|
"cache": false,
|
|
"outputs": ["node_modules/.prisma/**"]
|
|
}
|
|
}
|
|
}
|