@@ -11,6 +11,8 @@ Este documento descreve as principais funcionalidades, rotas, módulos e variáv
1111- Banco de dados gerenciado com Drizzle (Postgres).
1212- Autenticação via OAuth (Google/GitHub/LinkedIn) e credenciais (email/senha) com ` iron-session ` .
1313- Cache/índices em memória (Redis) e integração com sistema Valkey para pesquisa rápida.
14+ - Rotas administrativas para usuários, permissões, scrapers, auditoria e observabilidade.
15+ - Métricas Prometheus em ` /metrics ` .
1416- Documentação OpenAPI/Swagger disponível em ` /docs ` (quando habilitado).
1517
1618## Como executar (rápido)
@@ -40,12 +42,13 @@ npm test
4042npm run test:watch
4143```
4244
43- Scripts relevantes em ` package.json ` :
45+ Scripts relevantes em ` backend/ package.json` :
4446
4547- ` start ` , ` dev ` , ` api ` — iniciar servidor
4648- ` scraper ` , ` scraper:watch ` — executar scraper (index.ts / Go)
4749- ` test ` , ` test:coverage ` , ` test:watch ` — testes com Vitest
4850- ` db:generate ` , ` db:migrate ` , ` db:push ` — comandos Drizzle
51+ - ` security:backfill-user-pii ` — backfill de campos de PII criptografados
4952
5053## Arquitetura e módulos principais
5154
@@ -59,7 +62,9 @@ Módulos principais:
5962- ` src/modules/auth ` — OAuth providers, ` AuthController ` , ` AuthService ` , ` credentials ` (registro/login/logout).
6063- ` src/modules/users ` — perfis e preferências do usuário (` UsersController ` , ` UsersService ` ).
6164- ` src/modules/savedJobs ` — CRUD de vagas salvas (` SavedJobsController ` , ` SavedJobsService ` ).
62- - ` src/modules/* ` — outros módulos relacionados a credenciais, buscas e integrações.
65+ - ` src/modules/notifications ` — notificações do usuário autenticado.
66+ - ` src/modules/jobs ` — regras de matching/score de vagas.
67+ - ` src/modules/admin ` — usuários admin, permissões, scrapers, auditoria, dashboard e observabilidade.
6368
6469Adaptadores externos:
6570
@@ -85,6 +90,8 @@ Cache & Indexes:
8590- ` requireAuth ` — valida autenticação nas rotas que exigem usuário.
8691- ` securityHeaders ` — cabeçalhos de segurança.
8792- ` cors ` — configuração de CORS (opções em ` src/middleware/cors.ts ` ).
93+ - ` requestId ` — correlação de requisições.
94+ - ` metrics ` — coleta de métricas Prometheus.
8895- ` errorHandler ` — tratamento centralizado de erros.
8996
9097## Endpoints principais
@@ -93,6 +100,7 @@ Base: `/`
93100
94101- Sistema
95102 - ` GET /health ` — verifica disponibilidade (retorna ` { ok: true } ` ).
103+ - ` GET /metrics ` — métricas Prometheus.
96104 - ` GET /docs ` — UI do Swagger (quando habilitado).
97105
98106- Auth / OAuth
@@ -119,16 +127,34 @@ Base: `/`
119127 - ` GET /keywords ` — lista keywords persistidas no banco.
120128 - ` POST /keywords ` — enfileira uma keyword para processamento pelo serviço Go (retorna 202).
121129
130+ - Notificações
131+ - ` GET /notifications ` — lista notificações do usuário autenticado.
132+ - ` PATCH /notifications/:id/read ` — marca uma notificação como lida.
133+ - ` PATCH /notifications/read-all ` — marca todas como lidas.
134+ - ` DELETE /notifications ` — limpa notificações conforme filtros aceitos.
135+
122136- Vagas salvas (Saved Jobs)
123137 - ` GET /saved-jobs ` — lista vagas salvas do usuário.
124138 - ` GET /saved-jobs/:id ` — obtém vaga salva por id.
125139 - ` POST /saved-jobs ` — cria nova vaga salva.
126140 - ` PATCH /saved-jobs/:id ` — atualiza vaga salva.
127141 - ` DELETE /saved-jobs/:id ` — remove vaga salva.
128142
143+ - Admin
144+ - ` GET /admin/users ` — lista usuários.
145+ - ` GET /admin/users/:id ` — obtém usuário por id.
146+ - ` PATCH /admin/users/:id/block ` — bloqueia usuário.
147+ - ` PATCH /admin/users/:id/unblock ` — desbloqueia usuário.
148+ - ` POST /admin/users/:id/reset ` — reseta credenciais/senha conforme regra do serviço.
149+ - ` POST /admin/scrapers/run ` — dispara execução dos scrapers.
150+ - ` GET /admin/observability/metrics ` — visão de métricas administrativas.
151+ - ` GET /admin/observability/dashboards ` — lista dashboards de observabilidade.
152+ - ` GET /admin/audit ` — consulta logs de auditoria.
153+ - ` GET /admin/permissions/rules ` — lista regras de permissão.
154+
129155Observações de segurança nas rotas:
130156
131- - Rotas sob ` /users ` , ` /jobs ` , ` /keywords ` e ` /saved-jobs ` usam ` withSession ` + ` requireAuth ` (quando aplicável).
157+ - Rotas sob ` /users ` , ` /jobs ` , ` /keywords ` , ` /notifications ` , ` /saved-jobs ` e ` /admin ` usam ` withSession ` + ` requireAuth ` (quando aplicável).
132158- ` auth ` usa ` withSession ` para armazenar OAuth state e criar sessão.
133159
134160## Variáveis de ambiente importantes
@@ -148,13 +174,17 @@ Definidas/consumidas em `src/config.ts` e outros módulos:
148174- ` VALKEY_URL ` — endpoint do Valkey (se usado).
149175- ` GO_SCRAPER_URL ` — URL do serviço Go que realiza scraping.
150176- ` SESSION_SECRET ` — senha para ` iron-session ` (obrigatória em produção).
177+ - ` ENCRYPTION_MASTER_KEY ` , ` ENCRYPTION_KEY_ID ` , ` SEARCH_KEY ` — criptografia e campos pesquisáveis de PII.
178+ - ` CORS_ALLOWED_ORIGINS ` — origens permitidas, incluindo ` http://localhost:5173 ` e ` http://localhost:5174 ` em desenvolvimento local com admin.
179+ - ` PROMETHEUS_URL ` — integração com Prometheus para rotas de observabilidade.
151180- ` PORT ` — porta do servidor (padrão 3001).
152181
153182## Segurança e criptografia
154183
155184- Senhas armazenadas usando Argon2 (` argon2 ` ), com opções configuradas no serviço de credenciais.
156185- Cookies de sessão ` httpOnly ` e ` secure ` quando NODE_ENV=production.
157186- Índices únicos e constraints no DB (ex: email/username/keyword uniques) definidos nas tabelas Drizzle.
187+ - Campos sensíveis de perfil usam criptografia e hashes pesquisáveis onde aplicável.
158188
159189## Integração com serviço Go
160190
@@ -179,8 +209,11 @@ Definidas/consumidas em `src/config.ts` e outros módulos:
179209
180210## Docker / Infra
181211
182- - ` Dockerfile ` presente no diretório ` backend ` .
183- - ` docker-compose.yml ` no projeto raiz orquestra serviços (possivelmente ` scraper-go ` , ` postgres ` , ` redis ` ).
212+ - ` backend/Dockerfile ` existe para o backend.
213+ - O fluxo Docker principal usa ` docker/node.Dockerfile ` com targets para backend, frontend e admin.
214+ - ` docker-compose.yml ` no projeto raiz orquestra ` scraper-go ` , ` backend ` , ` frontend ` e ` front_admin ` .
215+ - ` docker-compose.infra.yml ` sobe Postgres e Valkey.
216+ - ` docker-compose.migrate.yml ` executa migrations e backfill antes do backend.
184217
185218## Pontos de atenção / Próximos passos sugeridos
186219
@@ -200,7 +233,7 @@ Seguem exemplos práticos para os endpoints mais usados. Ajuste `HOST` para seu
200233
201234Request:
202235
203- POST /api/ auth/register
236+ POST /auth/register
204237
205238``` json
206239{
@@ -229,7 +262,7 @@ Response (201):
229262
230263Request:
231264
232- POST /api/ auth/login
265+ POST /auth/login
233266
234267``` json
235268{
@@ -251,7 +284,7 @@ Response (200):
251284
252285Request:
253286
254- GET /api/ jobs/search?keywords=react,node&page=1&limit=10
287+ GET /jobs/search?keywords=react,node&page=1&limit=10
255288
256289Response (200):
257290
@@ -272,7 +305,7 @@ Response (200):
272305
273306Request:
274307
275- POST /api/ keywords
308+ POST /keywords
276309
277310``` json
278311{
@@ -293,7 +326,7 @@ Response (202):
293326
294327Request:
295328
296- POST /api/ saved-jobs
329+ POST /saved-jobs
297330
298331``` json
299332{
@@ -325,7 +358,7 @@ Response (201):
325358
326359Request:
327360
328- GET /api/ users/profile
361+ GET /users/profile
329362
330363Response (200):
331364
0 commit comments