API de Relacionamento Personal-Aluno
A API de Relacionamento Personal-Aluno do FitLocus fornece endpoints para gerenciamento das conexões entre personal trainers e seus alunos na plataforma.Visão Geral
A API de Relacionamento Personal-Aluno permite:
- Envio e gerenciamento de convites de personal trainers para alunos
- Aceitação ou recusa de convites por parte dos alunos
- Listagem de alunos vinculados a um personal trainer
- Listagem de personal trainers vinculados a um aluno
- Remoção de vínculos entre personal trainers e alunos
Modelo de Dados
PersonalStudentDTO
O objeto PersonalStudentDTO é utilizado para transferência de dados de relacionamentos entre personal trainers e alunos:InviteDTO
Objeto utilizado para envio de convites:Endpoints Principais
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /personal/students/invite | Envia um convite para um aluno |
| GET | /personal/invites | Lista convites enviados pelo personal trainer |
| GET | /students/invites | Lista convites recebidos pelo aluno |
| POST | /students/invites/{id}/accept | Aceita um convite |
| POST | /students/invites/{id}/reject | Recusa um convite |
| GET | /personal/students | Lista alunos vinculados ao personal trainer |
| GET | /students/personals | Lista personal trainers vinculados ao aluno |
| DELETE | /personal/students/{id} | Remove vínculo com um aluno |
| DELETE | /students/personals/{id} | Remove vínculo com um personal trainer |
Detalhes de Implementação
Autenticação
Todos os endpoints requerem autenticação via token JWT no cabeçalhoAuthorization:
Controle de Acesso
O acesso aos endpoints é controlado com base no tipo de usuário:- Endpoints com prefixo
/personal/só podem ser acessados por usuários do tipo PERSONAL - Endpoints com prefixo
/students/só podem ser acessados por usuários do tipo ALUNO - Verificações adicionais garantem que um usuário só possa acessar dados relacionados a si mesmo
Enviar Convite para Aluno
Endpoint
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
| Content-Type | application/json | Tipo de conteúdo da requisição |
Parâmetros da Requisição
O corpo da requisição deve conter um objeto JSON com os seguintes campos:| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| studentEmail | string | Sim | Email do aluno |
| message | string | Não | Mensagem personalizada para o convite |
Exemplo de Requisição
Resposta de Sucesso
Código: 201 CreatedRespostas de Erro
Código: 400 Bad RequestListar Convites Enviados
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| status | string | Não | Filtrar por status (PENDING, ACCEPTED, REJECTED, EXPIRED) |
| page | number | Não | Número da página (default: 0) |
| size | number | Não | Tamanho da página (default: 20) |
| sort | string | Não | Campo e direção de ordenação (ex: createdAt,desc) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedListar Convites Recebidos
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| status | string | Não | Filtrar por status (PENDING, ACCEPTED, REJECTED, EXPIRED) |
| page | number | Não | Número da página (default: 0) |
| size | number | Não | Tamanho da página (default: 20) |
| sort | string | Não | Campo e direção de ordenação (ex: createdAt,desc) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedAceitar Convite
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID do convite |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedRecusar Convite
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID do convite |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedListar Alunos do Personal Trainer
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Não | Filtrar por nome (busca parcial) |
| status | string | Não | Filtrar por status (ACTIVE, INACTIVE) |
| page | number | Não | Número da página (default: 0) |
| size | number | Não | Tamanho da página (default: 20) |
| sort | string | Não | Campo e direção de ordenação (ex: name,asc) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedListar Personal Trainers do Aluno
Endpoint
Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| name | string | Não | Filtrar por nome (busca parcial) |
| status | string | Não | Filtrar por status (ACTIVE, INACTIVE) |
| page | number | Não | Número da página (default: 0) |
| size | number | Não | Tamanho da página (default: 20) |
| sort | string | Não | Campo e direção de ordenação (ex: name,asc) |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 200 OKRespostas de Erro
Código: 401 UnauthorizedRemover Vínculo com Aluno
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID do relacionamento personal-aluno |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 204 No ContentRespostas de Erro
Código: 401 UnauthorizedRemover Vínculo com Personal Trainer
Endpoint
Parâmetros de URL
| Parâmetro | Tipo | Descrição |
|---|---|---|
| id | number | ID do relacionamento personal-aluno |
Cabeçalhos da Requisição
| Cabeçalho | Valor | Descrição |
|---|---|---|
| Authorization | Bearer | Token JWT do usuário |
Exemplo de Requisição
Resposta de Sucesso
Código: 204 No ContentRespostas de Erro
Código: 401 UnauthorizedImplementação no Frontend
Componente de Envio de Convite
Componente de Listagem de Alunos
Considerações de Design
A interface de gerenciamento de relacionamentos personal-aluno do FitLocus segue as diretrizes de design da plataforma:- Cores: Fundo escuro (#202020), elementos de destaque em verde (#B4ED00), texto em branco (#F9F9F9)
- Tipografia: Hanken Grotesk para texto e SUPERINE para títulos
- Layout: Design minimalista com espaçamento generoso e hierarquia clara
- Componentes: Campos de formulário com bordas arredondadas, botões com feedback visual ao interagir
Considerações de Segurança
- Validação de Dados: Todos os dados de entrada são validados tanto no frontend quanto no backend para prevenir injeção de dados maliciosos.
- Controle de Acesso: Verificações rigorosas garantem que um usuário só possa acessar e modificar seus próprios relacionamentos.
- Sanitização de Dados: Todos os dados de entrada são sanitizados antes de serem armazenados ou exibidos.
- HTTPS: Todas as comunicações com a API devem ser realizadas através de HTTPS para proteger dados sensíveis durante a transmissão.
- Limites de Plano: O sistema verifica se o personal trainer atingiu o limite de alunos do seu plano atual antes de permitir novos convites.
Regras de Negócio
-
Limites de Alunos por Plano:
- Plano Básico: até 5 alunos
- Plano Intermediário: até 15 alunos
- Plano Avançado: até 30 alunos
- Plano Premium: ilimitado
- Expiração de Convites: Convites não aceitos expiram automaticamente após 7 dias.
- Restrições de Vínculo: Um aluno pode ter múltiplos personal trainers, mas cada relacionamento é gerenciado independentemente.
-
Notificações: O sistema envia notificações por email quando:
- Um convite é enviado
- Um convite é aceito ou recusado
- Um vínculo é removido