[CRUD Categoria] Modal admin pra criar e excluir categorias personalizadas #71
Closed
FernandoAlmeidaPinto
started this conversation in
Features
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Resumo da entrega. 5 cards no total. Adiciona um modal na
DashProva(via botão "Gerenciar Categorias") onde admin pode listar todas as categorias (incluindo seedadas), criar personalizadas com nome auto-gerado, e excluir as que não estão em uso. Sem edit (decisão de design — categoria imutável).Documento de fundação:
docs/crud-categoria-simulado.mdPosição na série: 3 de 10 · Mapa da série: #66
Status da entrega ✅
Todos os 5 cards implementados e mergeados ✅
countByCategoria+ filtrogetAllms-simuladocreate+ auto-nome + validação de patternms-simuladoCategoriaControllerproxy + guardsapi-vcnafaculgetCategoriaById/createCategoria/deleteCategoriaclient-vcnafaculManageCategorias+ integraçãoDashProvaclient-vcnafaculPor que essa etapa
Hoje só existem as 6 categorias seedadas (Enem Dia 1, Enem Dia 2, Linguagens, Ciências Humanas, Ciências da Natureza, Matemática). Se admin quiser criar um simulado "Personalizado 30q 60min" pra usar em provas custom (etapa 4), não tem interface — precisaria mexer direto no banco.
Essa etapa cria a interface administrativa: modal acessível pela
DashProva, com listagem, criação restrita (só personalizadas, backend forçacustom: true) e exclusão protegida (409 quando em uso).Decisões cravadas
PATCH/ edit.Simuladoreferencia a categoria (proteção automática das seedadas) — retorna 409 com{ message, simuladosUsando }."{Prefixo} {qtd}q {duracao}min"(ou"{Prefixo} livre {duracao}min"quandoqtd == null). Preview em tempo real no form, espelhando a fórmula do backend.custom: trueeselecionavel: true— DTO malicioso é ignorado, backend é fonte de verdade.alterarPermissao(permissão de admin já existente). Sem permissão nova nesta etapa.deleted: { $ne: true }) nogetAll.NewProva: callbackonCategoriasChangedatualiza o select da criação de prova assim que uma categoria é criada/excluída.Pré-requisitos
Categoriacomcustom+selecionavel+exame.DashProvacomo ponto de entrada do gerenciamento.Cards desta etapa
Card 01 ·
ms-simulado· Enrichment dodelete+countByCategoria+ filtro nogetAllSimuladoRepository.countByCategoria.getAllfiltra soft-deleted.forwardRefpra resolver cicloCategoriaModule ↔ SimuladoModule.Card 02 ·
ms-simulado· Restrições nocreate+ auto-nome + validação de patterncustom: true, selecionavel: trueno service. Auto-gera nome a partir de prefixo + qtd + dur. Valida pattern do nome.Card 03 ·
api-vcnafacul·CategoriaController+ proxies + guardsGET,GET /:id,POST,DELETE).JwtAuthGuardsempre; escritas gated poralterarPermissao. DTOs espelho. Erros 409/400 propagados.Card 04 ·
client-vcnafacul· ServicesgetCategoriaById,createCategoria,deleteCategoriagetCategoriasjá existia). URL helpercategoriaById. Tratamento de erros específicos (409 comsimuladosUsando, 400 pattern).Card 05 ·
client-vcnafacul· ModalManageCategorias+ integração naDashProvaNewProvavia callback.protectedTipos.tscom lista de seedadas.Ajustes descobertos na implementação
Correções aplicadas ao validar os cards contra o código real:
CategoriaProxyControllerjá existia (foi estendido, não duplicado). Guard de escrita =JwtAuthGuardantes doPermissionsGuard(garante 401 sem token; 403 com token sem permissão).DashProva(foi adicionado por completo).getExamesnão existe: as opções de exame são derivadas da própria lista de categorias (.exame).ICategorianão traz contagem de uso, então a lista não pré-desabilita excluir por uso — o 409 real é tratado no clique via toast.Próximas etapas
Referências
All reactions