eTecTrilha API v1.0.0
API REST do eTecTrilha — app gamificado de estudos para o Vestibulinho ETEC. Autenticação via sessão NextAuth (cookie). Rotas /admin exigem papel ADMIN.
Especificação OpenAPI 3.0 completa em /api/openapi.json — importe no Swagger UI, Postman ou Insomnia.
Auth
Cadastro e login
/api/auth/registerCadastra usuário com e-mail e senha
/api/auth/forgot-passwordEnvia o link de redefinição de senha
Responde 200 mesmo quando o e-mail não existe ou a conta só tem login Google, para não permitir enumeração de cadastrados.
/api/auth/reset-passwordVerifica se um token de redefinição ainda é válido
/api/auth/reset-passwordTroca a senha usando o token recebido por e-mail
/api/auth/signinFluxo de login NextAuth (Google e credenciais)
Perfil
Dados do usuário logado
/api/meResumo do usuário: XP, nível, vidas, streak, precisão, revisões pendentes
/api/meAtualiza nome e preferência de som
Jornada
Disciplinas, módulos e fases
/api/journeyJornada completa: disciplinas → módulos → fases, com progresso e bloqueios
/api/phases/{id}Conteúdo de uma fase, sem gabarito (kind QUESTION → até 5 questões reais sorteadas entre as atribuídas; kind LESSON → exercícios + bonusQuestions, até 5 questões reais da disciplina)
/api/phases/{id}/completeRegistra conclusão de fase (bônus na primeira conclusão com ≥50%: +100 XP em fase de questões, +40 XP em lição)
Estudo
Respostas, revisão espaçada e desafio diário
/api/ai/explainExplica por IA por que uma resposta errada específica está errada (botão "Por que errei?")
Sob demanda, nunca automático. Cacheado por (conteúdo, resposta errada) — a primeira vez que alguém erra de um jeito específico chama a API; as seguintes leem do cache. Exige que o aluno já tenha respondido isso com essa resposta (não é possível sondar gabarito sem ter respondido). Limite diário de gerações reais por aluno (cache-hit não conta). O texto vem em tópicos, uma linha por tópico no formato "- Rótulo: conteúdo", em texto puro (sem markdown nem LaTeX). Explicação em cache gerada por uma versão anterior do prompt é regerada e sobrescrita.
/api/answersResponde uma questão — retorna gabarito, explicação, XP, vidas e conquistas
Regras: +10 XP por acerto (dobro no desafio diário; assinante Pró ganha +50% em cima); +50 XP a cada 5 acertos seguidos (campo combo); errar em fase/desafio custa 1 vida (assinante Pró não perde vidas); erros entram na revisão espaçada (1, 3, 7, 15, 30 dias).
/api/reportsReporta um problema em uma questão (vai para a fila de revisão do admin)
Um registro por aluno/questão: reenviar atualiza o reporte existente e reabre a análise. Máximo de 20 reportes pendentes por aluno.
/api/reviewQuestões erradas vencidas para revisar (repetição espaçada)
/api/challengeDesafio diário (5 exercícios de lição + 5 questões reais de calibração, que valem XP em dobro) e status do dia; format LEGACY para um dia já sorteado antes desta divisão (10 questões)
/api/challenge/completeRegistra a conclusão do desafio diário
Simulados
/api/examsLista os simulados do usuário
/api/examsCria um simulado com filtros (ano, disciplina, aleatório)
/api/exams/{id}Detalhe do simulado (gabarito incluído apenas após finalizar)
/api/exams/{id}/submitFinaliza o simulado: nota, acertos, erros, tempo, percentil e análise por disciplina
Estatísticas
/api/statsDashboard: acertos por disciplina, evolução semanal, mapa de calor, tempo estudado
/api/rankingRanking semanal, mensal ou geral
/api/achievementsConquistas (todas + desbloqueadas)
Plano
Plano Pró: teste grátis e concessão manual
/api/plan/trialAtiva o teste grátis do Pró (7 dias, uma vez por conta)
Admin
Gestão do banco de questões
/api/admin/questionsLista questões com filtros e paginação
/api/admin/questionsCadastra uma questão
/api/admin/questions/{id}Edita uma questão
/api/admin/questions/{id}Exclui uma questão
/api/admin/reportsFila de reportes de questões, com contagem de pendentes por questão
/api/admin/reports/{id}Resolve um reporte (aceita/recusa) — resolve em cascata os da mesma questão
/api/admin/settingsConfigurações do app editáveis pelo admin
/api/admin/settingsAtualiza o limiar de reportes pendentes que oculta a questão (0 = nunca)
/api/admin/planLista usuários com Pró ativo
/api/admin/planConcede ou revoga o Pró de um usuário por e-mail
/api/admin/importImporta questões em massa (JSON ou CSV, até 10.000 por chamada)
Cabeçalhos aceitos (flexíveis): ano, semestre, disciplina, tema, enunciado, a, b, c, d, e, correta/gabarito, explicacao, dificuldade, tempo_medio. Importar não cria fases na trilha: as questões ficam disponíveis para simulados/desafio/revisão; a trilha é montada por lições.