Each PRD documents real UI/API processes, service methods, states and gaps. Co-authored-by: Cursor <cursoragent@cursor.com>
65 lines
2.3 KiB
Markdown
65 lines
2.3 KiB
Markdown
# PRD — Usuários, senha e sessão
|
|
|
|
| Campo | Valor |
|
|
|-------|--------|
|
|
| **Produto** | Pizza Digital |
|
|
| **Versão app auditada** | v0.5.0 |
|
|
| **Ambiente** | https://pizza.itecnologys.com · VM125 · loja `pizza-digital-piloto` |
|
|
| **Spec de origem** | `docs/SPEC-USUARIOS.md` |
|
|
| **Módulo** | Auth + equipe |
|
|
| **Rotas UI** | `/login` `/admin/equipe` `/forgot-password` `/reset-password` |
|
|
| **APIs** | `/api/auth/*` `/api/users/*` |
|
|
| **Data** | 2026-11-09 |
|
|
| **Estilo** | PRD operacional detalhado (visão de desenvolvedor) |
|
|
| **Audiência** | Dev / QA / Product |
|
|
|
|
> Como ler: cada seção descreve o **processo real** (o que o sistema faz hoje),
|
|
> com passos de usuário, chamadas de API, regras de negócio e estados.
|
|
> Status: ✅ construído · ⚠️ parcial · ⏳ especificado / não entregue · 🐛 gap observado.
|
|
|
|
|
|
## 1. Entidades
|
|
`User`, `AuthToken`, `PushDevice`, `NotifyLog`, `UserCapability`
|
|
|
|
## 2. Processo — login
|
|
1. UI `/login` (demo: `pdv@pizza.local` / `805353` + storeSlug)
|
|
2. `POST /api/auth/login` { email, password, storeSlug }
|
|
3. Valida hash bcrypt; incrementa `failedLoginAttempts`
|
|
4. 5 falhas → `lockedUntil` +15 min
|
|
5. Sucesso → JWT + user + capabilities
|
|
6. `GET /api/auth/me` para refresh de sessão
|
|
|
|
## 3. Processo — política de senha
|
|
1. `GET /api/auth/password-policy`
|
|
2. Regras: ≥8, 1 upper, 1 lower, 1 dígito, sem local-part email
|
|
3. Código: `password-policy.ts`
|
|
|
|
## 4. Processo — CRUD equipe
|
|
1. Cap `staff.view` lista `GET /api/users`
|
|
2. Cap `staff.manage` cria `POST /api/users` (role, áreas, jobTitle)
|
|
3. Criar gestor extra exige `owners.manage`
|
|
4. Pode aplicar template na criação
|
|
5. `POST /api/users/:id/send-reset` dispara token reset
|
|
|
|
## 5. Processo — forgot / reset
|
|
1. `POST /api/auth/forgot-password` → resposta genérica
|
|
2. Token `password_reset` TTL 60 min
|
|
3. `POST /api/auth/reset-password` consome token, limpa lockout
|
|
4. `POST /api/auth/change-password` (autenticado)
|
|
|
|
## 6. Aceite
|
|
- ✅ Login/lockout/policy/CRUD/reset stub
|
|
- ⏳ SMTP/push produção (RF-USR-10)
|
|
|
|
|
|
## 7. Camada de serviço (AuthService)
|
|
|
|
| Método | Fluxo |
|
|
|--------|-------|
|
|
| `login` | storeSlug+email+senha → JWT; lockout |
|
|
| `me` | Rehidrata user+caps |
|
|
| `requestPasswordReset` | Token genérico |
|
|
| `resetPassword` | Consome token |
|
|
| `changePassword` | Autenticado |
|
|
|
|
UsersService: list/meta/create/update/sendReset/pushDevice.
|