Edge Functions Catalog — Plataforma OLP
Catálogo completo das Edge Functions do projeto. Última atualização: Abr/2026.
Índice
- Shared Helpers
- Admin
- Especialista
- Escola/Gestor
- Gestão
- Coordenador
- Comunicação
- Mural Olímpico
- Auth
- Cron
- Trial/Cadastro
- Pagamento
- Utilitários
- Webhooks
- Testing/Debug
- Mapa Function ↔ Hook
Shared Helpers
Arquivos em supabase/functions/_shared/ importados pelas Edge Functions.
Helpers Genéricos
| Helper | Descrição |
|---|---|
auth-helpers.ts | extractAuthenticatedUser(), requireAdmin(), requireRole() — extrai JWT do cookie olp_auth e valida papel |
cors-helpers.ts | getCorsHeaders(req), handleCorsPrelight(req) — CORS dinâmico com whitelist de origens |
jwt.ts | signAuthToken(), verifyAuthToken() — JWT do sistema admin com OLP_JWT_SECRET |
jwt-portal.ts | signPortalToken(), verifyPortalToken(), extractPortalToken() — JWT do mural com OLP_JWT_SECRET (unificado, diferenciado via claims portal_type) |
jwt-realtime.ts | signRealtimeToken() — JWT para canais Realtime do Supabase |
logging-helper.ts | registrarLog(), extractIP(), extractGeoFromHeaders() — log de auditoria com geolocalização |
diff-helper.ts | gerarAlteracoes(antes, depois, ignorar) — gera diff para operações UPDATE |
supabase-client.ts | createSupabaseClient(req) (ANON+JWT), createSupabaseSystem() (SERVICE_ROLE), createSupabasePublic() (ANON sem JWT), createSupabasePortalAuth() (ANON+Portal JWT) |
subscription-helper.ts | verificarAssinaturaEscola() — valida se escola tem assinatura ativa/trial válido |
permissions.ts | PERMISSIONS_BY_ROLE, resolveMenuForUser() — mapa de permissões por papel + resolução de menu (SSOT backend) |
me-helpers/resolve-bloqueios.ts | verificarBloqueios(), enriquecerPapeisComEscola() — validação de acesso multi-escola (status, assinatura, papéis sem tela) em 1 query |
cron-jobs.ts | Helpers para monitoramento e retry de cron jobs |
ntfy-helper.ts | enviarAlertaPush() — alertas push via ntfy.sh para operações críticas |
sms-templates.ts | gerarMensagemSMS(tipo, params) — templates centralizados de todas as mensagens enviadas pelo sistema (OTP, alertas, cobrança) |
wasender-whatsapp.ts | enviarMensagemComLog() — envio via WhatsApp (Wasender). Provedor exclusivo de mensagens da plataforma. |
payment-gateway.ts | Adapter centralizado do Mercado Pago: createPreference(), getPayment(), searchPayments(), invalidatePreference(), calcularValorLiquido(), getAccessToken(). Para trocar de provedor, alterar apenas este arquivo. |
cpf-validator.ts | isValidCPF() — validação de CPF com cálculo de dígitos verificadores |
Helpers de Domínio — Mural (portal-escola)
Resultado do split da Edge Function monolítica portal-escola (3.929→212 linhas no orquestrador).
| Helper | Funções exportadas | Linhas | Domínio |
|---|---|---|---|
portal-security.ts | checkRateLimit(), checkLockout(), registrarTentativa(), shouldSendAlert(), gerarPortalJWT() + constantes RATE_LIMIT_*, LOCKOUT_*, BURST_LIMIT_IP | ~224 | Segurança (rate limit, lockout progressivo, alertas ntfy) |
portal-login-aluno.ts | handleLookupEscola(), handleLoginAlunoA(), handleSendOtpAluno(), handleVerifyOtpAluno() | ~427 | Login aluno (método A: matrícula+DN, método B: CPF+OTP) |
portal-login-responsavel.ts | handleSendOtpResponsavel(), handleVerifyOtpResponsavel() | ~229 | Login responsável (CPF+OTP via WhatsApp, com verificação de bloqueio escola) |
portal-cadastro.ts | handleCadastroEnviarOtpResponsavel(), handleCadastroVerificarOtpResponsavel(), handleAutoVincularMatricula(), handleAutoDesvincular() | ~273 | Cadastro responsável, auto-vínculo/desvínculo de alunos |
portal-dashboard.ts | handleVerificarSessao(), handleGetAlunoDashboard() | ~215 | Sessão (aluno/responsável) e dashboard com snapshots mural_dados_publicados |
portal-config.ts | handleGetConfig(), handleSaveConfig(), handleCheckSlugAvailability(), handleVerificarCpfResponsavel(), handleUpdatePerfilResponsavel() | ~206 | Configuração mural, slug, perfil responsável |
Helpers de Domínio — Resultados (gestao-resultados)
Resultado do split da Edge Function monolítica gestao-resultados (3.137→~190 linhas no orquestrador).
| Helper | Funções exportadas | Linhas | Domínio |
|---|---|---|---|
resultados-compute.ts | recomputeFaseForOlimpiada(), computeSituacaoFromConfig(), computeCompetitionRanks(), queryInChunks(), tipo ConfigFaseNivel | ~240 | Lógica de recomputação, ranking, chunking de queries |
resultados-queries.ts | handleList(), handleListByOlimpiada(), handleStats(), handleStatsAgregados(), handlePreviewNotaCorte() | ~890 | Listagens e estatísticas (somente-leitura) |
resultados-mutations.ts | handleUpsertBatch(), handleUpsertSingle(), handleDelete(), handleDeleteWithInscription(), handleDeleteFaseResults() | ~960 | CRUD de resultados com recomputação automática |
resultados-config.ts | handleSetNotaCorte(), handleSetPremiacao(), handleSetPremiacoesManual(), handleRecompute() | ~470 | Configuração de nota de corte e premiações |
resultados-import.ts | processarImportacaoBackground() | ~430 | Importação background com detecção fuzzy de colunas |
Helpers de Domínio — Alunos (gestao-alunos)
Resultado do split da Edge Function monolítica gestao-alunos (2.413→~170 linhas no orquestrador).
| Helper | Funções exportadas | Linhas | Domínio |
|---|---|---|---|
alunos-crud.ts | listAlunos(), getAluno(), createAluno(), updateAluno(), deleteAluno(), hardDeleteAluno(), verificarLimiteAlunos(), getLimiteEscola() | ~1020 | CRUD completo com verificação de limite FAIL-CLOSE |
alunos-validation.ts | checkCpfsDuplicados(), checkDuplicates(), listSeries() | ~240 | Validação de duplicidades (CPF, matrícula, nome) |
alunos-transfer.ts | transferirTurma(), listarHistoricoAluno(), listarTransferenciasRecentes() | ~290 | Transferência de turma com histórico |
alunos-import.ts | processarImportacaoBackground() | ~400 | Importação background com agrupamento por turma |
Padrão de Client Supabase
| Client | Quando Usar |
|---|---|
createSupabaseClient(req) | Operações com RLS (maioria dos casos). Usa ANON_KEY + JWT do cookie. |
createSupabaseSystem() | Operações sem RLS. Requer justificativa documentada. Ex: auth (antes do login), admin cross-escola. |
createSupabasePublic() | Ações públicas sem autenticação. Ex: lookup de escola no mural. |
createSupabasePortalAuth() | Ações autenticadas do mural aluno/responsável. |
Admin
Funções para o papel administrador. Todas usam requireAdmin(req).
admin-dashboard
| Aspecto | Valor |
|---|---|
| Ações | (sem action — retorna métricas direto) |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminDashboardMetrics |
| Dados | total_escolas_ativas, total_usuarios_ativos, total_assinaturas_ativas, receita_ultimos_30_dias |
admin-escolas
| Aspecto | Valor |
|---|---|
| Ações | list, get_details, create, update, soft_delete |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminEscolas |
| Notas | Create auto-gera assinatura + faturas + usuário gestor. Usa invokeActionFlat. |
admin-usuarios
| Aspecto | Valor |
|---|---|
| Ações | list, list_escolas, list_papeis, create, update, hard_delete |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminUsuarios |
| Notas | Seed automático de permissões para coordenador/diretor. Filtros por escola e por papel na action list. |
admin-planos
| Aspecto | Valor |
|---|---|
| Ações | list, create, update |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminPlanos |
admin-assinaturas
| Aspecto | Valor |
|---|---|
| Ações | list, update, cancel, reactivate, change_plan |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminAssinaturas |
admin-faturas
| Aspecto | Valor |
|---|---|
| Ações | list, update_status, create, generate_batch, delete |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminFaturas |
admin-logs
| Aspecto | Valor |
|---|---|
| Ações | list, get_details |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminLogs |
admin-escola-dados
| Aspecto | Valor |
|---|---|
| Ações | get_details, get_dashboard, get_alunos, get_turmas, get_usuarios |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | (usado inline em admin-escola-detalhes) |
admin-usuarios-escola
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete |
| Papel | administrador |
| Client | createSupabaseClient(req) |
| Hook | useAdminUsuariosEscola |
admin-cron-monitor
| Aspecto | Valor |
|---|---|
| Ações | list_status, get_execucoes, retry_job |
| Papel | administrador |
| Client | createSupabaseSystem() |
| Hook | useAdminCronMonitor |
admin-feature-flags
| Aspecto | Valor |
|---|---|
| Ações | list, toggle |
| Papel | administrador |
| Client | createSupabaseSystem() |
| Hook | useAdminFeatureFlags |
| Log | feature_flag.toggle |
| Notas | Toggle altera ativa_global. Categorias na UI: Especialista, Coordenador, Escola, Diretor, Outros. Categoria "Admin" foi removida da UI (admin tem bypass total — flags admin são cosméticas sem efeito). |
admin-sms-logs
| Aspecto | Valor |
|---|---|
| Ações | list_recent, sync_status |
| Papel | administrador |
| Client | createSupabaseSystem() |
| Hook | (usado inline em admin-sms-logs) |
| Notas | Lista logs de mensagens WhatsApp com telefones mascarados. sync_status sincroniza status via webhook (Wasender). |
Especialista
Funções para o papel especialista. Usam requireRole(req, ['especialista', 'administrador']).
Feature Flag Gate: Desde Mar/2026, todas as 6 Edge Functions do especialista chamam
requireFeatureFlag()após a autenticação. O especialista é sujeito ao sistema de Feature Flags (não tem bypass). Flags keys:banners,header-novidades,olimpiadas-dados,templates-mensagens,cursos,tutoriais.
especialista-olimpiadas
| Aspecto | Valor |
|---|---|
| Ações | list, get, create, update, delete, save_cronograma, save_links, mudar_edicao, list_edicoes, save_niveis, save_series, save_config_inscricao |
| Papel | especialista, administrador |
| Client | createSupabaseClient(req) |
| Hook | useOlimpiadasData |
| Notas | Maior edge function do projeto (~1600 linhas). Gerencia olimpíadas completas. |
especialista-banners
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete, reorder, upload_image, track_view, track_click |
| Papel | especialista |
| Client | createSupabaseClient(req) |
| Hook | useBannersLogin |
especialista-headers
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete, reorder |
| Papel | especialista |
| Client | createSupabaseClient(req) |
| Hook | useHeadersNovidades |
especialista-templates
| Aspecto | Valor |
|---|---|
| Ações | list_hubs, get_hub, create_template, update_template, delete_template, list_personalizacoes |
| Papel | especialista |
| Client | createSupabaseClient(req) |
| Hook | useTemplatesData |
especialista-cursos
| Aspecto | Valor |
|---|---|
| Ações | list, get, create, update, delete |
| Papel | especialista |
| Client | createSupabaseClient(req) |
| Hook | useCursosData |
especialista-curso-videos
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete, reorder, publish, archive |
| Papel | especialista |
| Client | createSupabaseClient(req) |
| Hook | (usado inline em gerenciar-videos-curso) |
especialista-tutoriais
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete, reorder, upload_thumbnail |
| Papel | especialista |
| Client | createSupabaseClient(req) |
| Hook | useTutoriaisData |
Escola/Gestor
Funções para o papel escola (gestor).
escola-dashboard
| Aspecto | Valor |
|---|---|
| Ações | (sem action — retorna métricas + logs) |
| Papel | escola |
| Client | createSupabaseClient(req) |
| Hook | useEscolaDashboard |
escola-dados
| Aspecto | Valor |
|---|---|
| Ações | get, update, get_ano_letivo, update_ano_letivo, toggle_incremento_automatico |
| Papel (leitura) | escola, coordenador, diretor, pedagogico, professor, marketing, administrador |
| Papel (escrita) | escola |
| Client | createSupabaseClient(req) |
| Hook | useEscolaDados, useAnoLetivo |
| Nota | Payload normalizado: aceita { action, params } e { action, ...rest } |
escola-pagamentos
| Aspecto | Valor |
|---|---|
| Ações | get_assinatura, list_faturas, get_fatura, get_ciclo |
| Papel | escola, diretor |
| Client | createSupabaseClient(req) |
| Hook | useEscolaPagamentos |
tarefas-escola
| Aspecto | Valor |
|---|---|
| Ações | batch_init_agenda, list, create, update, delete, toggle_status, list_historico, list_responsaveis, list_olimpiadas_ativas, get_anotacao, update_anotacao, take_responsibility |
| Papel | escola, coordenador |
| Client | createSupabaseSystem() |
| Hook | useTarefasEscola |
| Notas | Sistema de tarefas da Agenda do coordenador. batch_init_agenda consolida mount (tarefas + responsáveis + olimpíadas + anotação + cores). list_historico separado por cache longo (5min). Frontend: src/components/agenda/. |
Gestão
Funções de gestão de dados escolares. Usam requireRole(req, ['escola', 'coordenador', 'administrador']).
gestao-turmas
| Aspecto | Valor |
|---|---|
| Ações | list, create, create_batch, update, delete, list_series (pública) |
| Papel | escola, coordenador, administrador |
| Client | createSupabaseSystem() |
| Hook | useGestaoTurmas |
| Notas | list_series é pública (antes do auth check). Usa SERVICE_ROLE justificado. |
gestao-alunos
| Aspecto | Valor |
|---|---|
| Ações | list, get, create, update, delete, hard_delete, list_series, check_cpfs, check_duplicates, transferir_turma, listar_historico_aluno, listar_transferencias_recentes, get_limite_escola, start_import_session, get_import_session_status, cancel_import_session |
| Papel | escola, coordenador, administrador |
| Client | createSupabaseSystem() |
| Hook | useGestaoAlunos, useImportacaoSessao |
| Arquitetura | Orquestrador (~170 linhas) + 4 helpers: alunos-crud.ts, alunos-validation.ts, alunos-transfer.ts, alunos-import.ts |
| Notas | Split realizado em Mar/2026. Importação inteligente com agrupamento por turma, detecção de coluna turma/série, matching automático, validação de duplicidades (CPF, matrícula, nome). Processamento background via EdgeRuntime.waitUntil em batches de 50. Verificação de limite de alunos FAIL-CLOSE. |
gestao-responsaveis
| Aspecto | Valor |
|---|---|
| Ações | list, get, create, update, delete, vincular_aluno, desvincular_aluno, bloquear_vinculo, desbloquear_vinculo |
| Papel | escola, coordenador, administrador |
| Client | createSupabaseSystem() |
| Hook | useGestaoResponsaveis |
gestao-usuarios-escola
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete, list_papeis, get_permissoes, update_permissoes |
| Papel | escola |
| Client | createSupabaseSystem() |
| Hook | useUsuariosEscola |
| Notas | Apenas gestor pode gerenciar usuários internos. |
gestao-resultados
| Aspecto | Valor |
|---|---|
| Ações | list, list_by_olimpiada, upsert_batch, upsert_single, set_nota_corte, set_premiacao, set_premiacoes_manual, delete, delete_with_inscription, delete_fase_results, stats, stats_agregados, preview_nota_corte, recompute, start_import_session, get_import_session_status, cancel_import_session |
| Papel | escola, coordenador |
| Client | createSupabaseClient(req) + createSupabaseSystem() (import sessions) |
| Hook | useGestaoResultados, useImportacaoResultados |
| Arquitetura | Orquestrador (~190 linhas) + 5 helpers: resultados-compute.ts, resultados-queries.ts, resultados-mutations.ts, resultados-config.ts, resultados-import.ts |
| Notas | Split realizado em Mar/2026. start_import_session usa EdgeRuntime.waitUntil para processamento background em batches de 50. Detecção dinâmica de colunas via regex fuzzy matching (matrícula, pontuação). Auto-inscreve alunos sem inscrição (status confirmada). recomputeFaseForOlimpiada chamado uma vez ao final para recalcular classificações. Usa queryInChunks para .in() com arrays grandes (>100 UUIDs), evitando limite de URL do PostgREST (~8KB). |
Coordenador
coordenador-olimpiadas
| Aspecto | Valor |
|---|---|
| Ações | list_available, list_adesoes, aderir, remover_adesao, get_detalhes |
| Papel | escola, coordenador |
| Client | createSupabaseClient(req) |
| Hook | useOlimpiadasCoordenador |
coordenador-videos
| Aspecto | Valor |
|---|---|
| Ações | list_cursos, get_curso, track_progress, get_progress, rate_video, add_comment, list_comments |
| Papel | coordenador |
| Client | createSupabaseClient(req) |
| Hook | useVideosCoord |
eventos-calendario
| Aspecto | Valor |
|---|---|
| Ações | list, create, update, delete |
| Papel | coordenador |
| Client | createSupabaseClient(req) |
| Hook | useEventosCalendario |
| Notas | Eventos manuais da escola + atividades de cronograma das olimpíadas. |
Comunicação
comunicacao-escola
| Aspecto | Valor |
|---|---|
| Ações | list_mensagens, send_mensagem, get_templates, get_destinatarios, get_estatisticas |
| Papel | escola, coordenador |
| Client | createSupabaseSystem() |
| Hook | useComunicacaoEscola |
mural-escola
| Aspecto | Valor |
|---|---|
| Ações | list, get, create, update, delete, reorder, upload_image, get_liberacoes, save_liberacoes |
| Papel | escola, coordenador |
| Client | createSupabaseSystem() |
| Hook | useMuralEscola |
inscricoes-olimpiada
| Aspecto | Valor |
|---|---|
| Ações | list, create, create_batch, update, delete, get_alunos_disponiveis, get_estatisticas |
| Papel | escola, coordenador |
| Client | createSupabaseSystem() |
| Hook | useInscricoesOlimpiada |
Mural Olímpico
portal-escola
| Aspecto | Valor |
|---|---|
| Ações Públicas | lookup_escola, get_series_escola, login_aluno_a, send_otp_aluno, verify_otp_aluno, send_otp_responsavel, verify_otp_responsavel, verificar_cpf_responsavel, cadastro_enviar_otp_responsavel, cadastro_verificar_otp_responsavel, check_slug_availability |
| Ações Mural Auth | auto_vincular_matricula, auto_desvincular, verificar_sessao, get_aluno_dashboard, update_perfil_responsavel, logout_portal |
| Ações Sistema Auth | get_config, save_config |
| Papel | Público + aluno (mural) + responsavel (mural) + escola (sistema) |
| Client | createSupabasePublic() (lookup/rate-limit), createSupabaseSystem() (login/CRUD), createSupabasePortalAuth() (sessão/dashboard) |
| Hook | useMuralPortal, useAlunoDashboard |
| Arquitetura | Orquestrador (~212 linhas, contém burstTracker stateful in-memory) + 6 helpers: portal-security.ts, portal-login-aluno.ts, portal-login-responsavel.ts, portal-cadastro.ts, portal-dashboard.ts, portal-config.ts |
| Notas | Split realizado em Mar/2026. Maior em complexidade. Usa JWT com claims distintas (OLP_JWT_SECRET unificado), cookie olp_mural. Inclui rate limit, lockout progressivo, validação de assinatura, alertas ntfy. O burstTracker permanece no index.ts por ser stateful (Map in-memory atrelado ao isolate Deno). |
Auth
Funções de autenticação. Todas são públicas (pré-login) ou usam JWT existente.
send-otp
| Aspecto | Valor |
|---|---|
| Input | { codigo } (CPF/CNPJ/INEP) |
| Papel | Público (pré-login) |
| Client | createSupabaseSystem() |
| Notas | Lookup primário (usuarios) + secundário (escolas). Valida status escola + assinatura antes de enviar OTP via WhatsApp (Wasender). Rate limit: 3/user/15min, 10/IP/hora. |
verify-otp
| Aspecto | Valor |
|---|---|
| Input | { codigo, otp } |
| Papel | Público (pré-login) |
| Client | createSupabaseSystem() |
| Output | Cookie HttpOnly olp_auth com JWT |
| Notas | Brute force protection (5 tentativas → lockout 15min). Retorna papéis + bloqueios (multi-role). |
verify-password
| Aspecto | Valor |
|---|---|
| Input | { codigo, senha } |
| Papel | Público (pré-login) |
| Client | createSupabaseSystem() |
| Output | Cookie HttpOnly olp_auth com JWT |
| Notas | Login via senha (Argon2). Alternativa ao OTP para usuários com senha configurada. |
me
| Aspecto | Valor |
|---|---|
| Papel | Qualquer autenticado |
| Client | createSupabaseClient(req) |
| Output | Dados do usuário logado + papéis |
| Notas | Chamado pelo auth-context.tsx para verificar sessão. |
logout
| Aspecto | Valor |
|---|---|
| Papel | Qualquer autenticado |
| Output | Remove cookies olp_auth e olp_mural |
select-role
| Aspecto | Valor |
|---|---|
| Input | { papel_nome } |
| Papel | Qualquer autenticado |
| Output | Novo JWT com principal_role atualizado |
| Notas | Usado na tela de seleção de perfil (multi-role). |
change-password
| Aspecto | Valor |
|---|---|
| Input | { senha_atual, nova_senha } |
| Papel | Qualquer autenticado |
| Client | createSupabaseSystem() |
| Notas | Troca de senha com validação de histórico (impede reutilização). Usa Argon2. |
set-password
| Aspecto | Valor |
|---|---|
| Input | { nova_senha } |
| Papel | Qualquer autenticado |
| Client | createSupabaseSystem() |
| Notas | Define senha pela primeira vez (usuários que ainda não têm senha). |
reset-password
| Aspecto | Valor |
|---|---|
| Input | { codigo } |
| Papel | Público |
| Client | createSupabaseSystem() |
| Notas | Envia OTP de reset via WhatsApp. Permite definir nova senha após verificação. |
Cron
Jobs agendados executados periodicamente.
faturamento-cron
| Aspecto | Valor |
|---|---|
| Trigger | Cron externo (Supabase Cron ou via HTTP) |
| Auth | CRON_SECRET via header |
| Ações | Gera faturas mensais, envia lembretes via WhatsApp (D-5, D-0), marca faturas vencidas |
| Client | createSupabaseSystem() |
maintenance-cron
| Aspecto | Valor |
|---|---|
| Trigger | Cron externo |
| Auth | CRON_SECRET via header |
| Ações | Limpa OTPs expirados, tokens de cadastro, notificações antigas, token blacklist, métricas rate limit, check sessão WhatsApp |
| Client | createSupabaseSystem() |
healthcheck-cron
| Aspecto | Valor |
|---|---|
| Trigger | Cron externo |
| Auth | CRON_SECRET via header |
| Ações | Verifica saúde dos serviços (DB, Edge Functions, providers). Atualiza cron_status. |
| Client | createSupabaseSystem() |
Trial/Cadastro
eventos-calendario-trial
| Aspecto | Valor |
|---|---|
| Ações | list |
| Papel | escola_trial |
| Client | createSupabaseClient(req) |
| Hook | useEventosCalendarioTrial |
| Notas | Versão simplificada do calendário para escolas em trial. |
cadastro-escola-publica
| Aspecto | Valor |
|---|---|
| Ações | Auto-cadastro trial (sem action) |
| Papel | Público |
| Client | createSupabaseSystem() |
| Hook | useCadastroPublico |
| Notas | Cria escola + assinatura trial + usuário gestor automaticamente. |
Pagamento
mercadopago-preference
| Aspecto | Valor |
|---|---|
| Ações | Gera preference de pagamento (PIX, boleto, cartão) |
| Papel | escola, diretor |
| Client | createSupabaseSystem() |
| Hook | useMercadoPago |
| Notas | Integração com MercadoPago API. Usa MP_ACCESS_TOKEN. |
mercadopago-webhook
| Aspecto | Valor |
|---|---|
| Trigger | Webhook do MercadoPago |
| Auth | Sem auth (validação por signature) |
| Ações | Atualiza status de fatura ao receber notificação de pagamento |
| Client | createSupabaseSystem() |
Utilitários
notificacoes
| Aspecto | Valor |
|---|---|
| Ações | list, mark_read, mark_all_read, count_unread, send |
| Papel | Qualquer autenticado |
| Client | createSupabaseClient(req) |
| Hook | useNotificacoes |
user-permissions
| Aspecto | Valor |
|---|---|
| Ações | get, update |
| Papel | escola |
| Client | createSupabaseClient(req) |
| Hook | useMyPermissions |
user-profile
| Aspecto | Valor |
|---|---|
| Ações | get, update |
| Papel | Qualquer autenticado |
| Client | createSupabaseClient(req) |
| Hook | useUserProfile |
user-presence
| Aspecto | Valor |
|---|---|
| Ações | heartbeat, list_online, disconnect |
| Papel | Qualquer autenticado |
| Client | createSupabaseClient(req) |
| Hook | (usado inline em top-right-header) |
auth-diagnostics
| Aspecto | Valor |
|---|---|
| Ações | Diagnóstico de autenticação (debug) |
| Papel | administrador |
| Client | createSupabaseSystem() |
| Notas | Ferramenta de debug. Verifica cookies, JWT, papéis. |
diretor-dashboard
| Aspecto | Valor |
|---|---|
| Ações | get_painel, get_financeiro, get_projeto_olimpico, get_uso_plataforma |
| Papel | diretor |
| Client | createSupabaseClient(req) |
| Hook | useDiretorDashboard |
Webhooks
wasender-webhook
| Aspecto | Valor |
|---|---|
| Trigger | Webhook do Wasender (WhatsApp provider) |
| Auth | WASENDER_WEBHOOK_SECRET via header |
| Ações | Atualiza delivery_status e delivery_updated_at em sms_log |
| Client | createSupabaseSystem() |
| Notas | Recebe status de entrega de mensagens WhatsApp. |
Testing/Debug
e2e-login
| Aspecto | Valor |
|---|---|
| Ações | Login direto para testes E2E (sem OTP) |
| Auth | E2E_TEST_PASSWORD — só funciona com senha de teste |
| Client | createSupabaseSystem() |
| Notas | Exclusivo para ambiente de staging/testes. Permite login sem WhatsApp. |
benchmark-argon2
| Aspecto | Valor |
|---|---|
| Ações | Benchmark de performance do Argon2 no Deno |
| Papel | administrador |
| Notas | Utilidade para calibrar parâmetros de hash. |
Mapa Function ↔ Hook
| Edge Function | Hook Frontend | Arquivo do Hook |
|---|---|---|
admin-dashboard | useAdminDashboardMetrics | src/hooks/useAdminDashboardMetrics.ts |
admin-escolas | useAdminEscolas | src/hooks/useAdminEscolas.ts |
admin-usuarios | useAdminUsuarios | src/hooks/useAdminUsuarios.ts |
admin-planos | useAdminPlanos | src/hooks/useAdminPlanos.ts |
admin-assinaturas | useAdminAssinaturas | src/hooks/useAdminAssinaturas.ts |
admin-faturas | useAdminFaturas | src/hooks/useAdminFaturas.ts |
admin-logs | useAdminLogs | src/hooks/useAdminLogs.ts |
admin-usuarios-escola | useAdminUsuariosEscola | src/hooks/useAdminUsuariosEscola.ts |
admin-cron-monitor | useAdminCronMonitor | src/hooks/useAdminCronMonitor.ts |
admin-feature-flags | useAdminFeatureFlags | src/hooks/useAdminFeatureFlags.ts |
especialista-olimpiadas | useOlimpiadasData | src/hooks/useOlimpiadasData.ts |
especialista-banners | useBannersLogin | src/hooks/useBannersLogin.ts |
especialista-headers | useHeadersNovidades | src/hooks/useHeadersNovidades.ts |
especialista-templates | useTemplatesData | src/hooks/useTemplatesData.ts |
especialista-cursos | useCursosData | src/hooks/useCursosData.ts |
especialista-tutoriais | useTutoriaisData | src/hooks/useTutoriaisData.ts |
escola-dashboard | useEscolaDashboard | src/hooks/useEscolaDashboard.ts |
escola-dados | useEscolaDados | src/hooks/useEscolaDados.ts |
escola-pagamentos | useEscolaPagamentos | src/hooks/useEscolaPagamentos.ts |
tarefas-escola | useTarefasEscola | src/hooks/useTarefasEscola.ts |
gestao-turmas | useGestaoTurmas | src/hooks/useGestaoTurmas.ts |
gestao-alunos | useGestaoAlunos | src/hooks/useGestaoAlunos.ts |
gestao-responsaveis | useGestaoResponsaveis | src/hooks/useGestaoResponsaveis.ts |
gestao-usuarios-escola | useUsuariosEscola | src/hooks/useUsuariosEscola.ts |
gestao-resultados | useGestaoResultados, useImportacaoResultados | src/hooks/useGestaoResultados.ts, src/hooks/useImportacaoResultados.ts |
coordenador-olimpiadas | useOlimpiadasCoordenador | src/hooks/useOlimpiadasCoordenador.ts |
coordenador-videos | useVideosCoord | src/hooks/useVideosCoord.ts |
eventos-calendario | useEventosCalendario | src/hooks/useEventosCalendario.ts |
eventos-calendario-trial | useEventosCalendarioTrial | src/hooks/useEventosCalendarioTrial.ts |
comunicacao-escola | useComunicacaoEscola | src/hooks/useComunicacaoEscola.ts |
mural-escola | useMuralEscola | src/hooks/useMuralEscola.ts |
inscricoes-olimpiada | useInscricoesOlimpiada | src/hooks/useInscricoesOlimpiada.ts |
portal-escola | useMuralPortal, useAlunoDashboard | src/hooks/useMuralPortal.ts, src/hooks/useAlunoDashboard.ts |
notificacoes | useNotificacoes | src/hooks/useNotificacoes.ts |
user-permissions | useMyPermissions | src/hooks/useMyPermissions.ts |
user-profile | useUserProfile | src/hooks/useUserProfile.ts |
cadastro-escola-publica | useCadastroPublico | src/hooks/useCadastroPublico.ts |
mercadopago-preference | useMercadoPago | src/hooks/useMercadoPago.ts |
diretor-dashboard | useDiretorDashboard | src/hooks/useDiretorDashboard.ts |
Resumo Estatístico
| Grupo | Qtd Functions | Total de Ações |
|---|---|---|
| Admin | 12 | ~40 |
| Especialista | 7 | ~45 |
| Escola/Gestor | 4 | ~20 |
| Gestão | 5 | ~55 |
| Coordenador | 3 | ~15 |
| Comunicação | 3 | ~20 |
| Mural Olímpico | 1 | ~18 |
| Auth | 9 | ~12 |
| Cron | 3 | ~8 |
| Trial/Cadastro | 2 | ~2 |
| Pagamento | 2 | ~3 |
| Utilitários | 6 | ~15 |
| Webhooks | 1 | ~1 |
| Testing/Debug | 2 | ~2 |
| Total | 59 | ~256 |