Files
BackendFocusAgenda/COMOUSARAAPI.md

300 lines
7.5 KiB
Markdown

# Guia de Uso da API - Agenda Digital para Estudantes
Esta API foi desenvolvida em **Java (Spring Boot)** com **MongoDB** para auxiliar estudantes na organização de tarefas e compromissos acadêmicos.
## Autenticação
A maioria dos endpoints requer autenticação via **Token JWT**. Para obtê-lo:
1. Realize o login em `POST /api/estudantes/login`.
2. Extraia o campo `token` do corpo da resposta.
3. Inclua o token no cabeçalho de todas as requisições subsequentes:
```
Authorization: Bearer SEU_TOKEN_AQUI
```
---
## Endpoints
### Estudantes
| Método | Rota | Descrição |
|--------|------|-----------|
| `POST` | `/api/estudantes/cadastro` | Cria um novo estudante |
| `POST` | `/api/estudantes/login` | Autentica e retorna o token JWT |
#### `POST /api/estudantes/cadastro`
**Body:**
```json
{
"nome": "João Silva",
"email": "joao@email.com",
"senha": "minhasenha",
"curso": "Ciência da Computação",
"periodo": 3
}
```
> `senha` — mínimo 6 caracteres | `periodo` — mínimo 1
**Resposta (`201 Created`):**
```json
{
"data": {
"id": "abc123",
"nome": "João Silva",
"email": "joao@email.com",
"curso": "Ciência da Computação",
"periodo": 3
},
"message": "Sucesso",
"timestamp": "2026-03-15T10:00:00"
}
```
#### `POST /api/estudantes/login`
**Body:**
```json
{
"email": "joao@email.com",
"senha": "minhasenha"
}
```
**Resposta (`200 OK`):**
```json
{
"data": {
"token": "eyJhbGciOiJIUzI1NiJ9...",
"estudante": {
"id": "abc123",
"nome": "João Silva",
"email": "joao@email.com",
"curso": "Ciência da Computação",
"periodo": 3
}
},
"message": "Sucesso",
"timestamp": "2026-03-15T10:00:00"
}
```
---
### Tarefas
| Método | Rota | Descrição |
|--------|------|-----------|
| `POST` | `/api/tarefas` | Cria uma nova tarefa |
| `GET` | `/api/tarefas/estudante/{estudanteId}` | Lista todas as tarefas de um estudante |
| `GET` | `/api/tarefas/estudante/{estudanteId}/pendentes` | Lista apenas as tarefas não concluídas |
| `GET` | `/api/tarefas/estudante/{estudanteId}/data?data=` | Lista tarefas de uma data específica |
| `GET` | `/api/tarefas/estudante/{estudanteId}/periodo?inicio=&fim=` | Lista tarefas em um intervalo de datas |
| `GET` | `/api/tarefas/{id}` | Retorna os detalhes de uma tarefa específica |
| `PUT` | `/api/tarefas/{id}` | Atualiza os dados de uma tarefa existente |
| `PATCH` | `/api/tarefas/{id}/concluir` | Marca uma tarefa como concluída |
| `DELETE` | `/api/tarefas/{id}` | Remove uma tarefa |
#### `POST /api/tarefas` · `PUT /api/tarefas/{id}`
**Body:**
```json
{
"titulo": "Trabalho de Cálculo",
"descricao": "Resolver lista de integrais",
"prioridade": "ALTA",
"status": "PENDENTE",
"dataEntrega": "2026-04-10",
"disciplinaId": "disc456",
"estudanteId": "abc123"
}
```
> `prioridade` — `BAIXA` | `MEDIA` | `ALTA` | `URGENTE`
> `status` — `PENDENTE` | `EM_ANDAMENTO` | `CONCLUIDA` | `ATRASADA`
> `dataEntrega` — formato `YYYY-MM-DD`, deve ser uma data futura
**Resposta (`201 Created` / `200 OK`):**
```json
{
"data": {
"id": "trf789",
"titulo": "Trabalho de Cálculo",
"descricao": "Resolver lista de integrais",
"prioridade": "ALTA",
"status": "PENDENTE",
"dataEntrega": "2026-04-10",
"disciplinaId": "disc456",
"estudanteId": "abc123"
},
"message": "Sucesso",
"timestamp": "2026-03-15T10:00:00"
}
```
#### `GET /api/tarefas/estudante/{estudanteId}/data`
**Query params:**
| Parâmetro | Tipo | Exemplo |
|-----------|------|---------|
| `data` | `LocalDate` (ISO) | `2026-04-10` |
#### `GET /api/tarefas/estudante/{estudanteId}/periodo`
**Query params:**
| Parâmetro | Tipo | Exemplo |
|-----------|------|---------|
| `inicio` | `LocalDate` (ISO) | `2026-04-01` |
| `fim` | `LocalDate` (ISO) | `2026-04-30` |
---
### Disciplinas
| Método | Rota | Descrição |
|--------|------|-----------|
| `POST` | `/api/disciplinas` | Cria uma nova disciplina |
| `GET` | `/api/disciplinas/estudante/{estudanteId}` | Lista todas as disciplinas de um estudante |
| `GET` | `/api/disciplinas/{id}?estudanteId=` | Retorna os detalhes de uma disciplina específica |
| `PUT` | `/api/disciplinas/{id}` | Atualiza uma disciplina existente |
| `DELETE` | `/api/disciplinas/{id}?estudanteId=` | Remove uma disciplina |
#### `POST /api/disciplinas` · `PUT /api/disciplinas/{id}`
**Body:**
```json
{
"nome": "Cálculo II",
"professor": "Prof. Rodrigues",
"sala": "B-204",
"cor": "#FF5733",
"estudanteId": "abc123"
}
```
> `nome` e `estudanteId` são obrigatórios. Os demais campos são opcionais.
**Resposta (`201 Created` / `200 OK`):**
```json
{
"data": {
"id": "disc456",
"estudanteId": "abc123",
"nome": "Cálculo II",
"professor": "Prof. Rodrigues",
"sala": "B-204",
"cor": "#FF5733"
},
"message": "Sucesso",
"timestamp": "2026-03-15T10:00:00"
}
```
#### `GET /api/disciplinas/{id}` · `DELETE /api/disciplinas/{id}`
**Query params:**
| Parâmetro | Tipo | Exemplo |
|-----------|------|---------|
| `estudanteId` | `String` | `abc123` |
---
### Eventos
| Método | Rota | Descrição |
|--------|------|-----------|
| `POST` | `/api/eventos` | Cria um novo evento |
| `GET` | `/api/eventos/estudante/{estudanteId}` | Lista todos os eventos de um estudante |
| `GET` | `/api/eventos/estudante/{estudanteId}/periodo?inicio=&fim=` | Lista eventos em um intervalo de data/hora |
| `GET` | `/api/eventos/estudante/{estudanteId}/proximos` | Lista os próximos eventos do estudante |
| `GET` | `/api/eventos/{id}?estudanteId=` | Retorna os detalhes de um evento específico |
| `PUT` | `/api/eventos/{id}` | Atualiza um evento existente |
| `DELETE` | `/api/eventos/{id}?estudanteId=` | Remove um evento |
#### `POST /api/eventos` · `PUT /api/eventos/{id}`
**Body:**
```json
{
"titulo": "Prova de Cálculo II",
"descricao": "Conteúdo: integrais e séries",
"tipo": "PROVA",
"local": "Sala B-204",
"disciplinaId": "disc456",
"dataHora": "2026-04-15T14:00:00",
"estudanteId": "abc123"
}
```
> `tipo` — `AULA` | `PROVA` | `TRABALHO` | `ESTUDO` | `EXAME` | `OUTRO`
> `dataHora` — formato ISO 8601: `YYYY-MM-DDTHH:MM:SS`
**Resposta (`201 Created` / `200 OK`):**
```json
{
"data": {
"id": "evt321",
"estudanteId": "abc123",
"titulo": "Prova de Cálculo II",
"descricao": "Conteúdo: integrais e séries",
"tipo": "PROVA",
"local": "Sala B-204",
"disciplinaId": "disc456",
"dataHora": "2026-04-15T14:00:00"
},
"message": "Sucesso",
"timestamp": "2026-03-15T10:00:00"
}
```
#### `GET /api/eventos/estudante/{estudanteId}/periodo`
**Query params:**
| Parâmetro | Tipo | Exemplo |
|-----------|------|---------|
| `inicio` | `LocalDateTime` (ISO) | `2026-04-01T00:00:00` |
| `fim` | `LocalDateTime` (ISO) | `2026-04-30T23:59:59` |
#### `GET /api/eventos/{id}` · `DELETE /api/eventos/{id}`
**Query params:**
| Parâmetro | Tipo | Exemplo |
|-----------|------|---------|
| `estudanteId` | `String` | `abc123` |
---
## Formato de Resposta
Todas as respostas seguem a estrutura:
```json
{
"data": { ... },
"message": "Sucesso",
"timestamp": "2026-03-15T10:00:00"
}
```
Em caso de erro, o campo `data` pode ser `null` e `message` conterá a descrição do problema.
---
## Execução
```bash
# Iniciar a aplicação
mvn spring-boot:run
# Executar os testes
mvn test
```