https://github.com/ianfelps/todo_list
Aplicação REST para gerenciamento de tarefas (To-do List) desenvolvida utilizando Java com o framework Spring.
https://github.com/ianfelps/todo_list
api-rest java spring spring-boot todo-list
Last synced: 2 months ago
JSON representation
Aplicação REST para gerenciamento de tarefas (To-do List) desenvolvida utilizando Java com o framework Spring.
- Host: GitHub
- URL: https://github.com/ianfelps/todo_list
- Owner: ianfelps
- Created: 2025-02-13T01:41:13.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-02-16T03:59:54.000Z (over 1 year ago)
- Last Synced: 2025-08-04T04:05:57.745Z (11 months ago)
- Topics: api-rest, java, spring, spring-boot, todo-list
- Language: Java
- Homepage:
- Size: 41 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# To-Do List em Java com Spring Boot
## Introdução
Este projeto é uma aplicação REST para gerenciamento de tarefas (To-do List) desenvolvida utilizando **Java** com o framework **Spring**. O objetivo é permitir que os usuários possam criar, listar, atualizar e deletar tarefas de forma simples e eficiente. A aplicação segue os princípios de desenvolvimento ágil e boas práticas de programação, utilizando a arquitetura MVC (Model-View-Controller).
## Estrutura do Projeto
A estrutura do projeto é organizada da seguinte forma:
- **src/main/java/com/ianfelps/todo_list**
- **controller**: Contém as classes responsáveis por gerenciar as requisições HTTP e interagir com os serviços.
- **entity**: Contém as classes que representam as entidades do banco de dados, mapeadas para tabelas.
- **repository**: Contém as interfaces que gerenciam a persistência de dados, utilizando Spring Data JPA.
- **service**: Contém as classes que implementam a lógica de negócio da aplicação.
- **TodoListApplication.java**: Classe principal que inicia a aplicação Spring Boot.
- **src/test/java/com/ianfelps/todo_list**
- **TodoListApplicationTests.java**: Contém os testes automatizados da aplicação, utilizando JUnit e Spring Test.
## Estrutura das Classes
### Todo
A classe `Todo` representa a entidade To-do e é mapeada para a tabela `todos` no banco de dados. Possui os seguintes atributos:
- `id`: Identificador único do To-do (chave primária).
- `nome`: Nome da tarefa (não pode ser vazio).
- `descricao`: Descrição da tarefa (não pode ser vazia).
- `realizado`: Indica se a tarefa foi concluída.
- `prioridade`: Nível de prioridade da tarefa (deve ser maior ou igual a zero).
### TodoController
A classe `TodoController` é responsável por gerenciar as requisições HTTP relacionadas aos To-dos. Os principais métodos incluem:
- `list()`: Retorna a lista de todos os To-dos.
- `create(Todo todo)`: Cria um novo To-do.
- `update(Long id, Todo todo)`: Atualiza um To-do existente.
- `delete(Long id)`: Deleta um To-do existente.
### TodoWebController - Em desenvolvimento...
A classe `TodoWebController` é responsável por processar as requisições HTTP da interface web. Os principais métodos incluem:
- `list()`: Retorna a lista de todos os To-dos.
### TodoService
A classe `TodoService` contém a lógica de negócio para manipulação dos To-dos. Os principais métodos incluem:
- `list()`: Lista todos os To-dos, ordenados por prioridade e ID.
- `create(Todo todo)`: Salva um novo To-do no repositório.
- `update(Long id, Todo todo)`: Atualiza um To-do existente.
- `delete(Long id)`: Remove um To-do do repositório.
### TodoRepository
A interface `TodoRepository` estende `JpaRepository`, fornecendo métodos prontos para operações CRUD (Create, Read, Update, Delete) na entidade To-do.
## Dependências
O projeto utiliza as seguintes dependências principais, definidas no arquivo `pom.xml`:
- **Spring Boot Starter Web**: Para construir aplicações web, incluindo suporte a RESTful APIs.
- **Spring Boot Starter Data JPA**: Para integração com bancos de dados usando JPA (Java Persistence API).
- **Spring Boot Starter Validation**: Para validação de dados de entrada.
- **MySQL Connector**: Para conexão com o banco de dados MySQL.
- **H2 Database**: Banco de dados em memória para testes e desenvolvimento.
- **Spring Boot DevTools**: Para facilitar o desenvolvimento com recarregamento automático.
- **Springdoc OpenAPI**: Para documentação Swagger da API, permitindo a visualização e teste dos endpoints.
- **Thymeleaf**: Para renderização de templates HTML.
## Interface Web - Em desenvolvimento...
A interface web da aplicação estã disponível no enderço padrão e apresenta a lista de todos os To-dos. Ela permite a criação, atualização e exclusão de tarefas.
## Endpoints da API
A aplicação expõe os seguintes endpoints:
- **GET /api**: Lista todos os To-dos.
- **POST /api**: Cria um novo To-do.
- **PUT /api/{id}**: Atualiza um To-do existente.
- **DELETE /api/{id}**: Deleta um To-do existente.
#### Documentação da API em Swagger: `http://localhost:8080/swagger-ui.html`
### Exemplo de Uso
#### Listar To-dos
```http
GET /api
```
#### Criar um To-do
```http
POST /api
Content-Type: application/json
{
"nome": "Nome do To-do",
"descricao": "Descrição do To-do.",
"realizado": false,
"prioridade": 1
}
```
#### Atualizar um To-do
```http
PUT /api/{id}
Content-Type: application/json
{
"nome": "Nome do To-do Atualizado",
"descricao": "Descrição do To-do Atualizada.",
"realizado": true,
"prioridade": 0
}
```
#### Deletar um To-do
```http
DELETE /api/{id}
```
## Testes Automatizados
Os testes automatizados estão implementados na classe `TodoListApplicationTests.java`. Eles garantem que as funcionalidades da aplicação estão funcionando conforme o esperado. Os principais testes incluem:
- `testCreateTodoSuccess()`: Testa a criação de um To-do com sucesso.
- `testCreateTodoFailure()`: Testa a criação de um To-do com falha.
- `testUpdateTodoSuccess()`: Testa a atualização de um To-do com sucesso.
- `testUpdateTodoFailure()`: Testa a atualização de um To-do com falha.
- `testDeleteTodoSuccess()`: Testa a exclusão de um To-do com sucesso.
## Como Executar o Projeto
Para executar o projeto, siga os passos abaixo:
### Pré-requisitos
- **Java JDK 17**: Certifique-se de que o Java JDK 17 está instalado em sua máquina. Você pode verificar a instalação executando o comando:
```bash
java -version
```
- **Maven**: Certifique-se de que o Maven esté instalado em sua máquina. Vocé pode verificar a instalação executando o comando:
```bash
mvn -version
```
- **Banco de Dados**: Configure um banco de dados MySQL e crie um banco de dados para a aplicação.
### Passos para Executar
1. **Clone o Repositório**:
Clone o repositório do projeto para sua máquina local:
```bash
git clone https://github.com/ianfelps/todo_list.git
cd todo_list
```
2. **Configurar o Banco de Dados**:
Edite o arquivo `src/main/resources/application.properties` para configurar a conexão com o banco de dados MySQL:
```properties
spring.datasource.url=jdbc:mysql://localhost:3306/seu_banco
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
spring.jpa.hibernate.ddl-auto=update
```
3. **Compilar o Projeto**:
Navegue até o diretório do projeto e execute o comando Maven para compilar o projeto:
```bash
mvn clean install
```
4. **Executar a Aplicação**:
Após a compilação bem-sucedida, você pode executar a aplicação com o seguinte comando:
```bash
mvn spring-boot:run
```
5. **Acessar a Interface Web**:
A interface web estará disponível em: `http://localhost:8080`. Vocé pode acessar a interface web para criar, editar e excluir To-dos de uma forma interativa e dinâmica.
6. **Acessar a API**:
A API estará disponível em: `http://localhost:8080/api`. Você pode acessar os endpoints conforme descrito na seção de **Endpoints da API**.
7. **Documentação da API**:
A documentação da API em Swagger pode ser acessada em: `http://localhost:8080/swagger-ui.html`
## Conclusão
Este projeto é uma demonstração de como construir uma API REST simples de gerenciamento de tarefas e foi uma excelente oportunidade de aprendizado permitindo-me aprofundar meus conhecimentos em Java, Spring, APIs REST, testes automatizados e boas práticas de desenvolvimento que tornem a aplicação mais fácil e entender e manter. Futuramente estarei implementando novas funcionalidades e uma integração com front-end para tornar a aplicação completa.