# 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 ```