🏟️ ReplayZone API

Documentação Completa da API de Gestão de Quadras Esportivas
Base URL: http://localhost:3000/api
🔑
Autenticação: X-API-KEY header
Formato: JSON

Autenticação Obrigatória

Todos os endpoints com prefixo /api exigem um API Key válido no header X-API-KEY.

Configure a variável de ambiente API_KEY no servidor para habilitar o acesso.

🔐 Autenticação

⚠️ Importante: Todas as rotas com prefixo /api requerem uma API Key válida no header x-api-key
Header obrigatório: x-api-key: Kaioh@30052003
Origens permitidas: https://app.replayzone.com.br, https://admin.replayzone.com.br, http://localhost:5173

🌐 Rotas Públicas (Sem Autenticação)

GET /health
Health check da API - retorna status do serviço
POST /teste-inadimplencia
Executa manualmente verificação de inadimplência e bloqueio de quadras
GET /status-cliente/:clienteId
Verifica status de um cliente específico
POST /vincular-cliente-quadra
Vincula um cliente a uma quadra

👥 Administração

🔐 Autenticação de Admin

POST /api/adminlogin
Login de administrador
Body: {"email": "string", "senha": "string"}

🚨 Possíveis Erros:

400 - E-mail e senha são obrigatórios
404 - Admin não encontrado
401 - Senha incorreta
500 - Erro interno no servidor
POST /api/admin-forgot-password
Recuperação de senha de admin
Body: {"email": "string", "novapassword": "string"}

🚨 Possíveis Erros:

404 - Admin não encontrado
500 - Erro ao atualizar a password
POST /api/adminregister
Criar novo administrador
Body: {"nome": "string", "email": "string", "senha": "string", "cargo": "string"}

🚨 Possíveis Erros:

400 - Senha inválida ou não fornecida
400 - Todos os campos são obrigatórios
400 - A senha deve ter pelo menos 8 caracteres
409 - Este email já está cadastrado no sistema
500 - Erro ao processar senha
500 - Erro interno no servidor

⚙️ Gestão de Administradores

GET /api/admins
Listar todos os administradores

🚨 Possíveis Erros:

500 - Erro interno ao buscar usuários
GET /api/admins/:id
Obter administrador específico
Parâmetros: id (path) - ID do admin

🚨 Possíveis Erros:

404 - Usuário não encontrado
500 - Erro interno ao buscar usuário
PUT /api/admins/:id
Atualizar dados completos do administrador
Body: {"nome": "string", "email": "string", "cargo": "string"}

🚨 Possíveis Erros:

404 - Usuário não encontrado
409 - Este email já está cadastrado por outro usuário
400 - Nenhuma alteração realizada
500 - Erro interno ao atualizar usuário
PATCH /api/admins/:id/cargo
Atualizar apenas o cargo do administrador
Body: {"cargo": "string"}

🚨 Possíveis Erros:

404 - Usuário não encontrado
400 - Cargo inválido. Use 1 (Admin), 2 (Gestor) ou 3 (Pendente)
400 - Nenhuma alteração realizada
500 - Erro interno ao atualizar cargo
DELETE /api/admins/:id
Excluir administrador
Parâmetros: id (path) - ID do admin

🚨 Possíveis Erros:

404 - Usuário não encontrado
400 - Nenhum usuário excluído
500 - Erro interno ao excluir usuário
PUT /api/admins/:id/password
Atualizar senha do administrador
Body: {"password": "string"}

🚨 Possíveis Erros:

404 - Usuário não encontrado
400 - Nenhuma alteração realizada
500 - Erro interno ao atualizar senha

👤 Usuários

🔐 Autenticação

POST /api/login
Login de usuário
Body: {"email": "string", "senha": "string"}

🚨 Possíveis Erros:

400 - E-mail e senha são obrigatórios
404 - Email não encontrado
401 - Senha incorreta
500 - Erro ao buscar o usuário
POST /api/register
Criar novo usuário
Body: {"nome": "string", "email": "string", "senha": "string", "telefone": "string"}

🚨 Possíveis Erros:

400 - Nome, e-mail, senha e telefone são obrigatórios
500 - Erro ao criar usuário
DELETE /api/usuarios/:id
Excluir usuário
Parâmetros: id (path) - ID do usuário

🚨 Possíveis Erros:

400 - ID do usuário é obrigatório
404 - Usuário não encontrado
500 - Erro ao excluir usuário
GET /api/usuarios/:id
Obter usuário por ID
Parâmetros: id (path) - ID do usuário

🚨 Possíveis Erros:

400 - ID do usuário é obrigatório
404 - Usuário não encontrado
500 - Erro ao buscar usuário
PUT /api/usuarios/:id
Atualizar usuário
Body: {"nome": "string", "email": "string", "senha": "string", "telefone": "string"}

🚨 Possíveis Erros:

400 - ID do usuário e ao menos um campo para atualização são obrigatórios
404 - Usuário não encontrado
500 - Erro ao atualizar usuário
PUT /api/usuarios/:id/senha
Alterar senha do usuário
Body: {"senhaAntiga": "string", "novaSenha": "string"}

🚨 Possíveis Erros:

400 - ID, senha antiga e nova senha são obrigatórios
404 - Usuário não encontrado
401 - Senha antiga incorreta
500 - Erro interno ao alterar a senha
PUT /api/usuarios/email/:email/senha
Alterar senha por email
Parâmetros: email (path) - Email do usuário

🚨 Possíveis Erros:

400 - Email e nova senha são obrigatórios
404 - Usuário não encontrado
500 - Erro interno ao alterar a senha
PUT /api/changepasswordemail/:email

⚙️ Gestão de Usuários

GET /api/getbyiduser/:id
Obter dados de um usuário
PUT /api/changeuser/:id
Atualizar dados do usuário
Body: {"nome": "string", "email": "string", "telefone": "string"}
PUT /api/changepassword/:id
Alterar senha do usuário
Body: {"password": "string"}
PUT /api/changepasswordemail/:email
Alterar senha por e-mail
Body: {"password": "string"}
DELETE /api/deleteuser/:id
Excluir usuário

🏟️ Quadras

📋 Gestão de Quadras

GET /api/quadras
Listar todas as quadras

🚨 Possíveis Erros:

404 - Nenhuma quadra encontrada
500 - Erro ao buscar quadras
GET /api/quadras/:id
Obter quadra por ID
Parâmetros: id (path) - ID da quadra

🚨 Possíveis Erros:

404 - Cliente não encontrado
500 - Erro ao buscar quadra
GET /api/quadras/usuario/:usuario_id
Listar quadras de um usuário
Parâmetros: usuario_id (path) - ID do usuário

🚨 Possíveis Erros:

400 - ID do usuário é obrigatório
404 - Este usuário não tem quadras associadas
500 - Erro ao consultar as quadras
POST /api/quadras
Criar nova quadra
Body: {"nome": "string", "endereco": "string", "cidade": "string", "estado": "string"}

🚨 Possíveis Erros:

400 - Nome, endereço, cidade e estado são obrigatórios
500 - Erro ao criar quadra
PUT /api/quadras/:id
Atualizar quadra
Body: {"nome": "string", "endereco": "string", "cidade": "string", "estado": "string"}

🚨 Possíveis Erros:

400 - ID da quadra é obrigatório
400 - Nome, endereço, cidade e estado são obrigatórios
404 - Quadra não encontrada
404 - Nenhuma alteração foi realizada
500 - Erro ao atualizar quadra
POST /api/vincular-usuario
Vincular usuário a quadra
Body: {"usuarioId": "number", "codigoQuadra": "string"}

🚨 Possíveis Erros:

400 - Usuário e código da quadra são obrigatórios
404 - Quadra não encontrada
400 - Usuário já está vinculado a esta quadra
500 - Erro ao vincular o usuário à quadra
DELETE /api/desvincular-usuario/:id
Desvincular usuário da quadra
Parâmetros: id (path) - ID do vínculo

🚨 Possíveis Erros:

400 - Selecione sua quadra
404 - Quadra não encontrada
500 - Erro ao excluir quadra
GET /api/quadras/slug/:slug
Buscar quadra por slug
Parâmetros: slug (path) - Slug da quadra

🚨 Possíveis Erros:

400 - Slug da quadra é obrigatório
404 - Quadra não encontrada
500 - Erro ao buscar quadra
POST /api/quadras/:quadra_id/restart-hls
Reiniciar todos os streams HLS de uma quadra
Parâmetros: quadra_id (path) - ID da quadra

🔗 Vínculos e Streaming

POST /api/vincular-usuario
Vincular usuário à quadra
Body: {"usuario_id": "number", "quadra_id": "number"}
POST /api/quadras/:quadra_id/restart-hls
Reiniciar todos os streams HLS de uma quadra
Parâmetros: quadra_id (path) - ID da quadra

🚨 Possíveis Erros:

400 - ID da quadra é obrigatório
404 - Nenhuma subquadra ativa com cameraId encontrada para esta quadra
500 - Erro interno ao processar reinicialização dos streams
POST /api/subquadras/:sub_quadra_id/restart-hls
Reiniciar stream de uma subquadra específica
Parâmetros: sub_quadra_id (path) - ID da subquadra

🚨 Possíveis Erros:

400 - ID da subquadra é obrigatório
404 - Subquadra não encontrada
400 - Subquadra não está ativa ou não possui cameraId configurado
500 - Erro ao reiniciar stream

Horários e Patrocinadores

PUT /api/horario-funcionamento/:quadra_id
Atualizar horário de funcionamento
Body: {"dias_semana": "array", "horario_abertura": "string", "horario_fechamento": "string"}
PUT /api/sponsors/:quadra_id
Atualizar patrocinadores
Body: {"sponsors": "array"}
GET /api/sponsors/:quadra_id
Obter patrocinadores da quadra
Parâmetros: quadra_id (path) - ID da quadra
GET /api/cleanup-unused-logos
Limpar logos não utilizados
GET /api/generate-test-video/:quadra_id
Gerar vídeo de teste para a quadra
Parâmetros: quadra_id (path) - ID da quadra
POST /api/quadras/generate-slugs
Gerar slugs para quadras existentes (uso único)
POST /api/upload-sponsor-logo
Upload de logo de patrocinador
Body: FormData com arquivo logo

🎯 Subquadras

GET /api/allsubquadras
Listar todas as subquadras
GET /api/subquadras/:quadra_id
Obter subquadras de uma quadra específica
GET /api/subquadras/detalhadas/:quadra_id
Obter subquadras detalhadas com contagem de vídeos
GET /api/subquadraid/:id
Obter subquadra específica por ID
GET /api/subquadras/videos/:subquadra_id
Obter todos os vídeos de uma subquadra
POST /api/subquadras
Criar nova subquadra
Body: {"nome": "string", "quadra_id": "number", "descricao": "string"}
GET /api/horarios-livres
Buscar horários livres das subquadras em um dia
Query: quadra_id, data, subquadra_id (opcional)
GET /api/horario-funcionamento
Obter horário de funcionamento para reserva
Query: quadra_id
GET /api/reservasportelefone
Buscar reservas por telefone
Query: telefone
GET /api/reservasporquadra
Buscar reservas por quadra
Query: quadra_id
GET /api/reservasportoken
Buscar reserva por token
Query: token

🚨 Possíveis Erros:

400 - Token é obrigatório
404 - Reserva não encontrada
500 - Erro interno ao buscar reserva
GET /api/reservas-por-data
Buscar reservas por quadra e data
Query: quadra_id, data

🚨 Possíveis Erros:

400 - quadra_id e data são obrigatórios
400 - Formato de data inválido. Use YYYY-MM-DD
500 - Erro interno ao buscar reservas
GET /api/cancelarreserva
Cancelar reserva
Query: id da reserva

🚨 Possíveis Erros:

404 - Reserva não encontrada
500 - Erro ao cancelar reserva
GET /api/cancelar-reserva-especifica
Cancelar reserva específica
Query: id da reserva

🚨 Possíveis Erros:

404 - Reserva não encontrada
500 - Erro ao cancelar reserva
GET /api/recusarreserva
Recusar reserva
Query: id da reserva

🚨 Possíveis Erros:

404 - Reserva não encontrada
500 - Erro ao recusar reserva
GET /api/reservas-pendentes
Buscar reservas pendentes a partir de uma data
Query: data_inicio

🚨 Possíveis Erros:

400 - quadra_id, data e hora são obrigatórios
400 - Formato de data inválido. Use YYYY-MM-DD
400 - Formato de hora inválido. Use HH:MM:SS
500 - Erro interno ao buscar reservas pendentes
GET /api/reservas-fixas
Listar reservas fixas
Query: quadra_id (opcional)
DELETE /api/reservas-fixas
Excluir reserva fixa
Query: id da reserva fixa
GET /api/relatorios
Gerar relatórios de reservas
Query: quadra_id, data_inicio, data_fim, tipo
GET /api/estatisticas
Obter estatísticas das reservas
Query: quadra_id, periodo
POST /api/reservas
Criar nova reserva
Body: {"subquadra_id": "number", "data": "string", "hora_inicio": "string", "hora_fim": "string", "telefone": "string", "nome": "string"}
POST /api/reserva-manual
Criar reserva manual (admin)
Body: {"subquadra_id": "number", "data": "string", "hora_inicio": "string", "hora_fim": "string", "usuario_id": "number", "status": "string"}
POST /api/enviarconfirmacao
Enviar confirmação por WhatsApp
Body: {"id": "number"}
POST /api/reservas-fixas
Criar reserva fixa
Body: {"subquadra_id": "number", "dia_semana": "number", "hora_inicio": "string", "hora_fim": "string", "usuario_id": "number"}
POST /api/gerar-reservas-fixas
Gerar reservas a partir das fixas
Body: {"data_inicio": "string", "data_fim": "string"}
GET /api/confirmarreserva
Confirmar reserva
Query: id da reserva

👥 Clientes

GET /api/clientes
Listar todos os clientes
GET /api/clientesbyid/:id
Obter cliente por ID
Parâmetros: id (path) - ID do cliente
GET /api/clientesbywidepayid/:id
Obter cliente por ID do WidePay
Parâmetros: id (path) - ID do WidePay
GET /api/clientesinadimplentes/
Listar clientes inadimplentes
GET /api/clientes-status-bloqueio
Obter clientes com status de bloqueio (para N8N)
GET /api/clientes-status-bloqueio/:id
Obter status de bloqueio de cliente específico
Parâmetros: id (path) - ID do cliente
PUT /api/clientesalterar/:id
Atualizar dados do cliente
Body: {"nome": "string", "email": "string", "telefone": "string", "endereco": "string"}
POST /api/clientescriar
Criar novo cliente
Body: {"nome": "string", "email": "string", "telefone": "string", "endereco": "string", "quadra_id": "number"}
DELETE /api/clientesdeletar/:id
Excluir cliente
Parâmetros: id (path) - ID do cliente
PUT /api/clientespendente/:id
Marcar cliente como pendente
Parâmetros: id (path) - ID do cliente
PUT /api/clientesatrasado/:id
Marcar cliente como atrasado
Parâmetros: id (path) - ID do cliente
POST /api/webhook-status-bloqueio
Webhook para atualizar status de bloqueio (N8N)
Body: {"cliente_id": "number", "status_bloqueio": "string", "motivo": "string"}

💰 Cobranças

GET /api/cobrancas
Listar todas as cobranças
GET /api/cobrancas/pendentes
Listar cobranças pendentes
GET /api/cobrancas/cliente/:id
Listar cobranças de um cliente
Parâmetros: id (path) - ID do cliente
GET /api/cobrancas/:id
Obter cobrança específica
Parâmetros: id (path) - ID da cobrança
POST /api/reservas-fixas
Criar reserva fixa
Body: {"subquadra_id": "number", "dia_semana": "number", "hora_inicio": "string", "hora_fim": "string", "usuario_id": "number"}
POST /api/gerar-reservas-fixas
Gerar reservas a partir das fixas
Body: {"data_inicio": "string", "data_fim": "string"}
POST /api/cobrancas
Criar nova cobrança
Body: {"cliente_id": "number", "valor": "number", "data_vencimento": "string", "descricao": "string"}
POST /api/cobrancas/gerar-mensais
Gerar cobranças mensais automáticas
Body: {"mes": "number", "ano": "number"}
PUT /api/cobrancas/:id
Atualizar cobrança
Body: {"valor": "number", "data_vencimento": "string", "descricao": "string"}
DELETE /api/cobrancas/:id
Excluir cobrança
Parâmetros: id (path) - ID da cobrança
PUT /api/cobrancas/:id/baixar
Dar baixa em cobrança (marcar como paga)
Body: {"data_pagamento": "string", "forma_pagamento": "string"}
POST /api/cobrancas/:id/enviar-whatsapp
Enviar cobrança por WhatsApp
Parâmetros: id (path) - ID da cobrança

🏢 Gerentes

POST /api/usuarios
Criar novo usuário (gerente)
Body: {"nome": "string", "email": "string", "senha": "string", "quadra_id": "number", "cargo": "string"}
GET /api/usuarios/quadra/:quadra_id
Buscar usuários por quadra
Parâmetros: quadra_id (path) - ID da quadra
PUT /api/usuarios/:id
Atualizar usuário
Body: {"nome": "string", "email": "string", "cargo": "string"}
DELETE /api/usuarios/:id
Excluir usuário
Parâmetros: id (path) - ID do usuário