# [Categoria] Refatoração do modelo: TipoSimulado → Categoria #65
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.
-
Resumo da entrega. 7 cards no total (6 obrigatórios + 1 opcional). Coloca o sistema em um modelo de domínio mais limpo, com
Categoriacarregandoexame+custom+selecionavel, e remove a duplicação e ambiguidade que existia ao longo dos schemas de Prova/Simulado.Documento de fundação:
docs/categoria-simulado.mdPosição na série: 1 de 10 (fundação — todos os outros docs dependem desta)
Por que essa etapa
Hoje o
TipoSimuladocarrega sónome,duracaoequantidadeTotalQuestao. A relação com Exame está espalhada (cadaProvatem seu próprioexame, separado do tipo). O dispatcher de factories funciona por convenção de nome e ano, sem uma fonte única de verdade. E a permissãocriarSimuladoé uma legada do passado que confunde devs novos.Essa etapa consolida o modelo:
TipoSimuladoviraCategoria(nome mais natural), absorve oexamecomo referência obrigatória, e ganha o discriminadorcustomque prepara o terreno pro fluxo de provas personalizadas (etapas futuras). O dispatcher passa a receber aProvadireto e lê tudo da categoria embutida.Prova.examedeixa de existir como campo separado.Decisões cravadas
TipoSimulado→Categoriaem todas as camadas.Categoria.exame: ref<Exame>obrigatório.Categoria.custom: boolean(defaultfalse) — sinaliza fluxo customizado (consumido em etapas futuras).Categoria.selecionavel: boolean(defaulttrue) — distingue categorias usáveis no nível de Prova (Enem Dia 1, Enem Dia 2, Personalizadas) das que são só classificador interno (Linguagens, Matemática, Humanas, Natureza).Categoria.descricao: string(opcional, default'').Categoria.quantidadeTotalQuestaopassa a ser nullable (cobre futuro tipo "Personalizado livre").Prova.tipo→Prova.categoria; removeProva.exame(vem decategoria.exame).Simulado.tipo→Simulado.categoria.ProvaFactory.getFactory(prova)recebe a prova populada e lêprova.categoria.custom,prova.categoria.exame.nome,prova.ano."Personalizado".exame/custom/selecionavelcorretos.Pré-requisitos
Nenhum. Esta é a fundação da série.
Cards desta etapa
Card 01 ·
ms-simulado· Rename do módulo TipoSimulado → Categoria (naming puro)Card 02 ·
ms-simulado· Adicionar campos novos em Categoria + seed Exame "Personalizado"exame,custom,selecionavel,descricao+ tornarquantidadeTotalQuestaonullable. Seed do Exame "Personalizado".Card 03 ·
ms-simulado· Refactor da relação Prova/Simulado/Categoria + dispatcher + factories ENEMProva.exame, refatora dispatcher, atualiza ~15 callsites nas factories ENEM e no sync.Card 04 ·
api-vcnafacul· DTOs espelho + contratos atualizadostipos→categoria.Card 05 ·
client-vcnafacul· Rename services + tipos + ajuste das 6 telassimulado.tipo.xouhistorico.simulado.tipo.x.Card 06 ·
scripts· Script Python de migração de dados (MongoDB)Card 07 ·
ms-simulado· BugfixcalcularMediaAproveitamento(OPCIONAL)Coordenação de deploy
O deploy desta etapa exige coordenação porque envolve 3 projetos + migração de dados:
tiposimulados,provas,simulados) commongodump. Arquivar intocado.mongorestore --drop.Janela de manutenção curta (~10-20min). Idealmente em homol primeiro pra validar end-to-end.
Riscos consolidados
categoria.exameesquecido em algum service →undefined.nomeem runtime. Cobertura por testes.Próximas etapas (referência)
Depois de Categoria, a série segue:
[Unificação]unificacao-simulados-provas.md[CRUD Categoria]crud-categoria-simulado.md[Provas Custom]prova-customizada-factory.md[Janela Simulado]simulado-janela-disponibilidade.md[Provas Cursinho]provas-cursinho.md[Cartão Resposta]cartao-resposta.md[Compartilhamento]simulados-compartilhados.md[Questão Multi-Prova]questoes-em-multiplas-provas.md[Duplicação Questão]duplicacao-questoes.mdReferências
docs/categoria-simulado.mddocs/resumo-time.mddocs/pendencias.mdBeta Was this translation helpful? Give feedback.
All reactions