[Janela Simulado] Disponibilidade temporal do simulado (disponivelDe/disponivelAte) #73
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 etapa. 4 cards no total. Adiciona janela de disponibilidade opcional por simulado (
disponivelDe/disponivelAte), complementar aobloqueadoatual. Admin edita as datas inline na vista de simulados doShowProva; aluno só vê o que está dentro da janela (viagetAvailable); backend faz gate emgetToAnswer(403 se fora).POST /answernão é gated — grace period pra quem começou dentro da janela.Documento de fundação:
docs/simulado-janela-disponibilidade.mdPosição na série: 5 de 10 · Mapa da série: #66
Status
📋 Planejada — os 4 cards já estão no GitHub Project #2 na coluna To Do. Ainda não implementada.
disponivelDe/disponivelAte+ availability + índicems-simuladoPATCH /disponibilidade+ filtrogetAvailable+ gategetToAnswerms-simuladoPATCH /disponibilidade+ DTOsapi-vcnafaculclient-vcnafaculPor que essa etapa
Hoje o único gate de disponibilidade é o
Simulado.bloqueado(questões cadastradas + aprovadas). Uma vez desbloqueado, fica disponível pra sempre — impede "simuladão agendado" (cursinhos parceiros e o VNF não conseguem dizer "abre dia X às 8h, fecha dia Y às 23:59").Essa etapa adiciona a janela temporal como camada complementar ao bloqueado. Retrocompatibilidade total — legados ficam
null/nulle continuam disponíveis como hoje.Decisões cravadas
Date | null). Combos:null/null(sempre), sóde, sóaté,de + até(janela fechada).!bloqueado && (de==null || agora>=de) && (ate==null || agora<=ate), em função puraisSimuladoAvailable.getAvailabilityStatus→ enum de 4 valores (disponivel | bloqueado | antes_da_janela | depois_da_janela) pra UI (🟢🟡🔴🔒⚪).ShowProva(não no NewProva).cadastrarProvas(sem permissão nova).getToAnswercom 403{ message, status }.POST /answerNÃO gated — grace period intencional (quem abriu dentro pode submeter fora).getAvailableaplica a regra completa. Índice composto{ categoria, bloqueado, disponivelDe, disponivelAte }.Pré-requisitos
ShowProva(onde as datas são editadas) já existe. Independente das demais etapas.Cards desta etapa
ms-simulado· SchemadisponivelDe/disponivelAte+ funções puras (isSimuladoAvailable,getAvailabilityStatus) + índice composto. Prep, sem mudança comportamental. · #161ms-simulado·PATCH /disponibilidade(validação cross-field) + filtro emgetAvailable+ gate 403 emgetToAnswer.POST /answerintocado. · #162api-vcnafacul· ProxyPATCH /disponibilidadegated porcadastrarProvas+ DTO espelho + as 2 datas noSimuladoDTO. · #505client-vcnafacul· Vista de simulados: edição inline viadatetime-local+ coluna de status (5 estados) + toast amigável no 403 do aluno. · #645Coordenação de deploy
Sem migration SQL. Ordem: ms-simulado (01+02, schema + índice composto na inicialização) → api-vcnafacul (03) → client-vcnafacul (04). Documentos legados nascem
null/null(disponíveis como hoje).Riscos consolidados
disponivelDe >= disponivelAte→ 400.getToAnswerrevalida → 403 → toast (comportamento correto).isSimuladoAvailable) vs frontend (getStatus) — manter em sync; backend é fonte de verdade.Próximas etapas
Independente — pode ser executada em qualquer ponto após [Categoria] + [Unificação]. Não é pré-requisito das próximas etapas.
Referências
All reactions