Skip to content

feat(categoria): Card 01 — bloquear delete de categoria em uso + filtro soft-deleted - #155

Merged
FernandoAlmeidaPinto merged 4 commits into
developfrom
feature/crud-categoria-card-01-delete-enrichment
Jul 26, 2026
Merged

feat(categoria): Card 01 — bloquear delete de categoria em uso + filtro soft-deleted#155
FernandoAlmeidaPinto merged 4 commits into
developfrom
feature/crud-categoria-card-01-delete-enrichment

Conversation

@FernandoAlmeidaPinto

Copy link
Copy Markdown
Member

Closes #153

Etapa 3 (CRUD Categoria) — Card 01. Enriquece o backend do ms-simulado para o CRUD de categorias.

Summary

  • SimuladoRepository.countByCategoria(categoriaId) — conta simulados não-deletados que referenciam a categoria (filtro pelo campo booleano deleted, correto — não deletedAt).
  • CategoriaService.delete — 404 se a categoria não existe; 409 com payload { message, simuladosUsando } se algum simulado a referencia; só então soft-delete. Efeito: as 6 categorias seedadas ficam naturalmente protegidas (todas têm simulados em uso).
  • CategoriaRepository.getAll — passa a filtrar soft-deleted (deleted: { $ne: true }), preservando o where do caller e o .populate('exame'). Guard posto por último no spread ({ ...where, deleted: { $ne: true } }) para o caller não conseguir sobrescrevê-lo.
  • Ciclo CategoriaModule ↔ SimuladoModule resolvido com forwardRef nos dois lados (risco [003-007] Migração simulado - Nest #1 do card).

Decisões

  • CRUD imutável: nenhuma rota PATCH/update de categoria foi adicionada (confirmado no controller).
  • getById inalterado: continua retornando mesmo categorias soft-deleted (compat com simulados históricos).
  • Mantido @Inject(forwardRef(() => SimuladoRepository)) no CategoriaService como escolha defensiva. A app foi confirmada bootando (Nest application successfully started), então o ciclo resolve; o forwardRef no parâmetro é belt-and-suspenders e não causa dano.

Test Plan

  • Unit: countByCategoria (filtro), delete (sucesso, 409 c/ contador, payload, 404), getAll (filtro + where + populate) — 6/6 passam
  • npm run build limpo
  • Boot local: Nest application successfully started (ciclo de DI resolve)
  • Homol: excluir "Enem Dia 1" retorna 409; GET /v1/categoria não lista soft-deleted

Fora de escopo (registrado)

SimuladoRepository.getTotalEntity()/entityActived() filtram por { deletedAt: null } (campo inexistente no schema — bug pré-existente na develop). Não corrigido aqui para não ampliar escopo.

🤖 Generated with Claude Code

@FernandoAlmeidaPinto
FernandoAlmeidaPinto merged commit 1e00c2d into develop Jul 26, 2026
3 checks passed
@FernandoAlmeidaPinto
FernandoAlmeidaPinto deleted the feature/crud-categoria-card-01-delete-enrichment branch July 26, 2026 05:48
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 01 · ms-simulado · Enrichment do delete + countByCategoria + filtro no getAll

1 participant