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

post/api/auth/register

Cadastra usuário com e-mail e senha

post/api/auth/forgot-password

Envia 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.

get/api/auth/reset-password

Verifica se um token de redefinição ainda é válido

post/api/auth/reset-password

Troca a senha usando o token recebido por e-mail

get/api/auth/signin

Fluxo de login NextAuth (Google e credenciais)

Perfil

Dados do usuário logado

get/api/me

Resumo do usuário: XP, nível, vidas, streak, precisão, revisões pendentes

patch/api/me

Atualiza nome e preferência de som

Jornada

Disciplinas, módulos e fases

get/api/journey

Jornada completa: disciplinas → módulos → fases, com progresso e bloqueios

get/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)

post/api/phases/{id}/complete

Registra 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

post/api/ai/explain

Explica 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.

post/api/answers

Responde 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).

post/api/reports

Reporta 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.

get/api/review

Questões erradas vencidas para revisar (repetição espaçada)

get/api/challenge

Desafio 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)

post/api/challenge/complete

Registra a conclusão do desafio diário

Simulados

get/api/exams

Lista os simulados do usuário

post/api/exams

Cria um simulado com filtros (ano, disciplina, aleatório)

get/api/exams/{id}

Detalhe do simulado (gabarito incluído apenas após finalizar)

post/api/exams/{id}/submit

Finaliza o simulado: nota, acertos, erros, tempo, percentil e análise por disciplina

Estatísticas

get/api/stats

Dashboard: acertos por disciplina, evolução semanal, mapa de calor, tempo estudado

get/api/ranking

Ranking semanal, mensal ou geral

get/api/achievements

Conquistas (todas + desbloqueadas)

Plano

Plano Pró: teste grátis e concessão manual

post/api/plan/trial

Ativa o teste grátis do Pró (7 dias, uma vez por conta)

Admin

Gestão do banco de questões

get/api/admin/questions

Lista questões com filtros e paginação

post/api/admin/questions

Cadastra uma questão

put/api/admin/questions/{id}

Edita uma questão

delete/api/admin/questions/{id}

Exclui uma questão

get/api/admin/reports

Fila de reportes de questões, com contagem de pendentes por questão

patch/api/admin/reports/{id}

Resolve um reporte (aceita/recusa) — resolve em cascata os da mesma questão

get/api/admin/settings

Configurações do app editáveis pelo admin

patch/api/admin/settings

Atualiza o limiar de reportes pendentes que oculta a questão (0 = nunca)

get/api/admin/plan

Lista usuários com Pró ativo

post/api/admin/plan

Concede ou revoga o Pró de um usuário por e-mail

post/api/admin/import

Importa 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.