Skip to content

feat(categoria): Card 02 — create restrito (força custom, auto-nome, 409/400) - #156

Merged
FernandoAlmeidaPinto merged 2 commits into
developfrom
feature/crud-categoria-card-02-create-restrictions
Jul 26, 2026
Merged

feat(categoria): Card 02 — create restrito (força custom, auto-nome, 409/400)#156
FernandoAlmeidaPinto merged 2 commits into
developfrom
feature/crud-categoria-card-02-create-restrictions

Conversation

@FernandoAlmeidaPinto

Copy link
Copy Markdown
Member

Closes #154

Etapa 3 (CRUD Categoria) — Card 02. Restringe a criação de categorias via POST /v1/categoria a apenas personalizadas.

Summary

  • CategoriaService.add (método real, chamado pelo controller POST):
    • Resolve o nome: usa dto.nome ou auto-gera de prefixo + qtd + duração (gerarNomeAuto).
    • Colisão (409) checada ANTES do pattern (400) — necessário porque nomes seedados (ex.: "Enem Dia 1") não seguem o pattern custom; com a ordem inversa dariam 400 em vez do 409 esperado.
    • Valida o pattern do nome (validarPatternNome → 400).
    • Força custom: true + selecionavel: true via Object.assign (override por último) — backend é fonte de verdade, ignora o DTO.
  • DTO CreateCategoriaDTOInput: nome agora opcional, novo prefixo?, e o @CategoriaUnique foi removido (unicidade migrou pro service → 409, decisão aprovada).
  • gerarNomeAuto normaliza whitespace interno do prefixo (o nome tem índice unique — evita "Mini X""Mini X").

Decisões

  • Unicidade de nome: 409 no service (antes era 400 via validator no DTO). Fonte de verdade única.
  • Ordem colisão → pattern (corrige contradição entre os critérios feat(deps): adiciona dependencia faltante #4 e Fix/003 007 #5 do card).
  • CRUD imutável: nenhuma rota/método PATCH/update de categoria.

Test Plan

  • 8 unit tests de add + 4 de delete (Card 01) intactos → 14/14 passam
  • npm run build limpo
  • Homol: POST {quantidadeTotalQuestao:30,duracao:60}"Personalizado 30q 60min"; {nome:'Enem Dia 1'} → 409; {nome:'x'} → 400

Follow-up (minor, não-bloqueante)

  • Nome explícito com espaço duplo interno ainda passa o pattern (auto-gen já é normalizado; índice unique é backstop).
  • CategoriaUniqueValidator fica registrado no módulo sem uso após sair do DTO.

🤖 Generated with Claude Code

@FernandoAlmeidaPinto FernandoAlmeidaPinto self-assigned this Jul 26, 2026
@FernandoAlmeidaPinto
FernandoAlmeidaPinto merged commit c20f680 into develop Jul 26, 2026
3 checks passed
@FernandoAlmeidaPinto
FernandoAlmeidaPinto deleted the feature/crud-categoria-card-02-create-restrictions branch July 26, 2026 07:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[CRUD Categoria] Card 02 · ms-simulado · Restrições no create + auto-nome + validação de pattern

1 participant