Parte do épico Captação de profissionais — landing page e aprovação interna (frente: backend).
Objetivo: Endpoint de cadastro leve que cria a conta do profissional sem OTP e já a coloca na fila de moderação.
Arquivos: Modify src/controller/userController/index.mjs, src/routes/index.mjs, src/services/validationService.mjs · Test src/tests/registerProfessional.test.mjs
Dependências: #79 (Model User)
O que fazer:
POST /auth/registerProfessional recebe name, email, telefone, CNPJCPFProfissional, endereço, professionalSpecialties[], comoConheceu, acceptedTerms. Cria User status: pending, termsAcceptedAt e publicationStatus: em_analise — como o wizard foi engavetado, o cadastro é a entrada direta na fila de moderação (o admin avalia com os dados do cadastro).
- Segurança: fixar
userType: ["professional"] no servidor — nunca aceitar userType do body.
- Sem OTP. Emite JWT de escopo limitado (
scope: registration_pending, TTL do checkOTP).
validateLeadRegistration + rate limiting (@upstash/ratelimit).
Nota de evolução: quando a central de perfil entrar (épico central-perfil), o gate de em_analise pode migrar do cadastro automático para o "enviar para análise" da central (#88) — decisão de produto, ver developmentHC/conectaBemFront#244.
Test scenarios: payload válido → 201 + token escopo registration_pending + publicationStatus: em_analise; userType:["admin"] no body ignorado; token rejeitado em endpoints sensíveis; e-mail duplicado → conflito; sem aceite/especialidades/CPF/telefone inválidos → 400.
Pronto quando: POST válido cria o profissional sem OTP, com userType fixado, token de escopo limitado, e já em em_analise.
Parte do épico Captação de profissionais — landing page e aprovação interna (frente: backend).
Objetivo: Endpoint de cadastro leve que cria a conta do profissional sem OTP e já a coloca na fila de moderação.
Arquivos: Modify
src/controller/userController/index.mjs,src/routes/index.mjs,src/services/validationService.mjs· Testsrc/tests/registerProfessional.test.mjsDependências: #79 (Model User)
O que fazer:
POST /auth/registerProfessionalrecebename,email,telefone,CNPJCPFProfissional, endereço,professionalSpecialties[],comoConheceu,acceptedTerms. Cria Userstatus: pending,termsAcceptedAtepublicationStatus: em_analise— como o wizard foi engavetado, o cadastro é a entrada direta na fila de moderação (o admin avalia com os dados do cadastro).userType: ["professional"]no servidor — nunca aceitaruserTypedo body.scope: registration_pending, TTL docheckOTP).validateLeadRegistration+ rate limiting (@upstash/ratelimit).Nota de evolução: quando a central de perfil entrar (épico
central-perfil), o gate deem_analisepode migrar do cadastro automático para o "enviar para análise" da central (#88) — decisão de produto, ver developmentHC/conectaBemFront#244.Test scenarios: payload válido → 201 + token escopo
registration_pending+publicationStatus: em_analise;userType:["admin"]no body ignorado; token rejeitado em endpoints sensíveis; e-mail duplicado → conflito; sem aceite/especialidades/CPF/telefone inválidos → 400.Pronto quando: POST válido cria o profissional sem OTP, com
userTypefixado, token de escopo limitado, e já emem_analise.