Parte do épico Captação de profissionais — landing page e aprovação interna (frente: backend).
Objetivo: Login de admin por senha, autorização admin e seed.
Arquivos: Modify src/controller/userController/index.mjs (ou adminController), src/routes/index.mjs, src/middleware/authMiddleware.mjs · Create src/scripts/seedAdmin.mjs · Test src/tests/adminAuth.test.mjs
Dependências: Task 1 (Model User)
O que fazer:
POST /auth/adminLogin (email + password, confirma userType inclui admin, bcrypt.compare, emite JWT). Rate limiting estrito (ex.: 5/15min por IP).
requireAdmin: como o authMiddleware só seta req.userId, faz User.findById(req.userId) e checa userType.includes("admin"). Aplicar no prefixo /admin. Barra token registration_pending.
seedAdmin.mjs cria admin com senha hasheada lendo ADMIN_SEED_EMAIL/ADMIN_SEED_PASSWORD do ambiente (adicionar ao .env.example); nunca logar a senha.
Test scenarios: login correto → 200+token; senha errada → 401; não-admin → 401/403; requireAdmin com token de profissional/registration_pending → 403; seed hasheia a senha.
Pronto quando: admin provisionável por seed loga com e-mail+senha (com rate limit) e o middleware protege rotas via lookup no banco.
Parte do épico Captação de profissionais — landing page e aprovação interna (frente: backend).
Objetivo: Login de admin por senha, autorização admin e seed.
Arquivos: Modify
src/controller/userController/index.mjs(ouadminController),src/routes/index.mjs,src/middleware/authMiddleware.mjs· Createsrc/scripts/seedAdmin.mjs· Testsrc/tests/adminAuth.test.mjsDependências: Task 1 (Model User)
O que fazer:
POST /auth/adminLogin(email + password, confirmauserTypeincluiadmin,bcrypt.compare, emite JWT). Rate limiting estrito (ex.: 5/15min por IP).requireAdmin: como oauthMiddlewaresó setareq.userId, fazUser.findById(req.userId)e checauserType.includes("admin"). Aplicar no prefixo/admin. Barra tokenregistration_pending.seedAdmin.mjscria admin com senha hasheada lendoADMIN_SEED_EMAIL/ADMIN_SEED_PASSWORDdo ambiente (adicionar ao.env.example); nunca logar a senha.Test scenarios: login correto → 200+token; senha errada → 401; não-admin → 401/403;
requireAdmincom token de profissional/registration_pending→ 403; seed hasheia a senha.Pronto quando: admin provisionável por seed loga com e-mail+senha (com rate limit) e o middleware protege rotas via lookup no banco.