Skip to content

Commit c8678b4

Browse files
committed
docs(readme): refine project narrative and engineering roadmap
1 parent 7ba2031 commit c8678b4

1 file changed

Lines changed: 43 additions & 48 deletions

File tree

README.md

Lines changed: 43 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,18 @@
22

33
![CI](https://github.com/john-dalmolin/auth-api-node/actions/workflows/ci.yml/badge.svg)
44

5-
API de autenticação e gestão de sessão construída com foco em padrões de engenharia de software para produção: arquitetura em camadas, rastreabilidade de requisições, documentação OpenAPI, testes automatizados e CI com banco/redis reais.
5+
API de autenticação e gestão de sessão com foco em robustez de backend: arquitetura em camadas, controle de sessão com rotação de token, rate limiting com Redis, documentação OpenAPI e pipeline de qualidade com testes automatizados.
66

7-
## Visão do projeto
7+
## Objetivo
88

9-
Este repositório foi evoluído como base de estudo e portfólio técnico para demonstrar decisões de backend além do CRUD.
9+
Este projeto foi construído como laboratório de engenharia aplicada para portfólio, com foco em decisões técnicas próximas de ambiente real de produção.
1010

11-
Escopo principal:
11+
O escopo principal cobre:
1212

1313
- autenticação com `accessToken` + `refreshToken` com rotação;
1414
- revogação de sessão por token e por usuário;
15-
- validação e tratamento de erros consistentes;
16-
- observabilidade mínima para operação real;
15+
- validação de entrada e tratamento de erros consistente;
16+
- observabilidade mínima para operação;
1717
- qualidade contínua com lint, cobertura e CI.
1818

1919
## Snapshot de maturidade (fev/2026)
@@ -30,10 +30,10 @@ Escopo principal:
3030
- Express 5
3131
- TypeScript 5.9
3232
- Prisma 7 + PostgreSQL
33-
- Redis (ioredis)
33+
- Redis (`ioredis`)
3434
- JWT (`jsonwebtoken`) + `bcryptjs`
35-
- Zod para validação de payload
36-
- Pino para logging estruturado
35+
- Zod (validação de payload)
36+
- Pino (logging estruturado)
3737
- Vitest + Jest + Supertest
3838
- Biome (lint/format)
3939
- Swagger UI + swagger-jsdoc
@@ -43,51 +43,36 @@ Escopo principal:
4343
Padrão em camadas:
4444

4545
- `routes`: contrato HTTP e composição de middlewares
46-
- `controllers`: orquestração de entrada/saída
46+
- `controllers`: orquestração de request/response
4747
- `services`: regras de negócio
4848
- `repositories`: persistência e consultas
4949

5050
Middlewares críticos:
5151

52-
- `requestId`: correlação de requisição
52+
- `requestId`: correlação por requisição
5353
- `logger`: log estruturado com contexto
5454
- `validate`: validação de entrada com Zod
5555
- `authMiddleware`: proteção de rotas com JWT
56-
- `rateLimiter`: proteção anti-abuso com Redis + fallback memória
57-
- `errorHandler`: resposta de erro unificada
56+
- `rateLimiter`: proteção anti-abuso com Redis + fallback em memória
57+
- `errorHandler`: normalização de respostas de erro
5858

59-
## Fluxo de autenticação
59+
## Fluxo de autenticação e sessão
6060

61-
1. `POST /auth/register` cria usuário com senha hasheada.
62-
2. `POST /auth/login` valida credenciais e retorna `accessToken` + `refreshToken`.
63-
3. `POST /auth/refresh` valida refresh token, revoga o antigo e emite novo par.
64-
4. `POST /auth/logout` revoga refresh token atual.
65-
5. `POST /auth/logout-session` e `POST /auth/logout-all` encerram sessões específicas ou todas.
61+
1. `POST /auth/register`: cria usuário com senha hasheada.
62+
2. `POST /auth/login`: valida credenciais e emite `accessToken` + `refreshToken`.
63+
3. `POST /auth/refresh`: valida refresh token, revoga o token anterior e gera novo par.
64+
4. `POST /auth/logout`: revoga a sessão atual.
65+
5. `POST /auth/logout-session` e `POST /auth/logout-all`: encerram sessões específicas ou todas.
6666

6767
## Segurança e confiabilidade implementadas
6868

6969
- refresh token persistido com hash (`tokenHash`) no banco
7070
- rotação por `jti` com revogação explícita
71-
- validação de segredo JWT no startup (fail fast)
71+
- validação de `JWT_SECRET` no startup (fail fast)
7272
- tratamento centralizado de erro com `AppError`
73-
- rate limit em endpoints sensíveis
74-
- logs de aplicação ajustados para reduzir ruído em ambiente de teste
75-
- encerramento adequado de conexões de teste para evitar open handles
76-
77-
## Progresso técnico recente
78-
79-
Últimas entregas relevantes em `main`:
80-
81-
- [#14](https://github.com/john-dalmolin/auth-api-node/pull/14) estabilidade de runtime de testes (teardown Prisma)
82-
- [#15](https://github.com/john-dalmolin/auth-api-node/pull/15) aumento de branch coverage em fluxos de auth/rate limiter
83-
- [#16](https://github.com/john-dalmolin/auth-api-node/pull/16) redução de ruído de logs em execução de teste
84-
- [#18](https://github.com/john-dalmolin/auth-api-node/pull/18) cobertura completa de branches em `src/config/prisma.ts`
85-
- [#19](https://github.com/john-dalmolin/auth-api-node/pull/19) cobertura completa de branches em `src/logger.ts`
86-
- [#20](https://github.com/john-dalmolin/auth-api-node/pull/20) cobertura completa de branches em `validate.ts` e `errorHandler.ts`
87-
88-
## Backlog atual
89-
90-
As próximas tasks técnicas estão em `to-do.txt`, separando entregas concluídas de próximos incrementos de engenharia.
73+
- rate limit para endpoints sensíveis
74+
- redução de ruído em logs de teste
75+
- teardown de recursos de teste para evitar open handles
9176

9277
## Setup local
9378

@@ -128,6 +113,7 @@ Para testes, usar `tests/.env.test`.
128113
- `npm run format`: valida formatação
129114
- `npm test`: suíte principal (Vitest)
130115
- `npm run test:coverage:jest`: cobertura com Jest
116+
- `npm run test:coverage:vitest`: cobertura com Vitest
131117
- `npm run typecheck`: verificação de tipos
132118

133119
## Validação rápida
@@ -138,7 +124,6 @@ npm run test:coverage:jest
138124
npx jest --config jest.config.cjs --runInBand --detectOpenHandles --openHandlesTimeout=5000
139125
```
140126

141-
142127
## Endpoints principais
143128

144129
- `POST /auth/register`
@@ -155,19 +140,29 @@ npx jest --config jest.config.cjs --runInBand --detectOpenHandles --openHandlesT
155140
- `GET /docs`
156141
- `GET /docs.json`
157142

158-
## Roadmap técnico
143+
## Progresso técnico recente
159144

160-
### Próximo ciclo
145+
Últimas entregas relevantes em `main`:
146+
147+
- [#14](https://github.com/john-dalmolin/auth-api-node/pull/14) estabilidade de runtime de testes (teardown Prisma)
148+
- [#15](https://github.com/john-dalmolin/auth-api-node/pull/15) aumento de branch coverage em fluxos de auth/rate limiter
149+
- [#16](https://github.com/john-dalmolin/auth-api-node/pull/16) redução de ruído de logs em execução de teste
150+
- [#18](https://github.com/john-dalmolin/auth-api-node/pull/18) cobertura completa de branches em `src/config/prisma.ts`
151+
- [#19](https://github.com/john-dalmolin/auth-api-node/pull/19) cobertura completa de branches em `src/logger.ts`
152+
- [#20](https://github.com/john-dalmolin/auth-api-node/pull/20) cobertura completa de branches em `validate.ts` e `errorHandler.ts`
153+
- [#21](https://github.com/john-dalmolin/auth-api-node/pull/21) cobertura completa de branches em rate limiter e redis config
154+
155+
## Roadmap técnico
161156

162-
- ampliar testes de falhas de infraestrutura (Redis/DB indisponível)
163-
- consolidar decisão final Vitest x Jest para cobertura
164-
- expandir regras de sessão por dispositivo (metadata mais rica)
157+
Próximos incrementos:
165158

166-
### Evolução futura
159+
- consolidar decisão final de cobertura (Jest vs Vitest vs modelo híbrido documentado)
160+
- ampliar cenários de indisponibilidade externa (Redis e DB)
161+
- evoluir regras de sessão por dispositivo (metadados mais ricos)
162+
- documentar ADR de sessão/rotação
163+
- reforçar checklist de segurança (dependências, segredo e expiração)
167164

168-
- endurecimento de segurança (revisão de dependências e policy de segredo)
169-
- maior observabilidade (métricas e tracing)
170-
- preparo para cenário multi-instância com limites distribuídos avançados
165+
Backlog detalhado: `to-do.txt`.
171166

172167
## Estrutura de pastas
173168

0 commit comments

Comments
 (0)