Uma API REST para gerenciamento de tarefas construída com Spring Boot, que oferece funcionalidades de autenticação JWT e operações CRUD completas para tasks.
TaskFlow é uma API REST moderna para gerenciamento de tarefas que permite:
- ✅ Cadastro e autenticação de usuários
- ✅ Criação, edição, listagem e exclusão de tarefas
- ✅ Sistema de autenticação JWT
- ✅ Paginação de resultados
- ✅ Estatísticas de tarefas por usuário
- ✅ Validação de dados
- ✅ Segurança com Spring Security
- Java 21
- Spring Boot 3.5.6
- Spring Data JPA - Persistência de dados
- Spring Security - Autenticação e autorização
- Spring Validation - Validação de dados
- PostgreSQL - Banco de dados
- Flyway - Migração de banco de dados
- JWT (java-jwt) - Tokens de autenticação
- Lombok - Redução de código boilerplate
- SpringDoc OpenAPI - Documentação da API
- Maven - Gerenciador de dependências
Antes de executar o projeto, certifique-se de ter:
- Java JDK 21 ou superior
- PostgreSQL instalado e rodando
- Maven 3.8+ (ou use o wrapper incluído)
- Git
-
Clone o repositório:
git clone https://github.com/seu-usuario/TaskFlow_api.git cd TaskFlow_api -
Configure o banco de dados PostgreSQL:
- Certifique-se que o postgreSQL esteja rodando na porta 5432
- Crie uma database postgres o flyway cuidará do resto
-
Instale as dependências:
./mvnw clean install
Ou no Windows:
mvnw.cmd clean install
O arquivo de configuração está localizado em src/main/resources/application.yml:
spring:
datasource:
url: jdbc:postgresql://localhost:5432/postgres
username: postgres
password: postgres
jpa:
show-sql: true
properties:
hibernate.default_schema: taskflow_db
flyway:
enabled: true
schemas: taskflow_db
table: flyway_schema_history
api:
security:
token:
secret: ${JWT_SECRET:MY_SECRET_KEY}| Variável | Descrição | Valor Padrão |
|---|---|---|
JWT_SECRET |
Chave secreta para assinatura dos tokens JWT | MY_SECRET_KEY |
-
Execute a aplicação:
./mvnw spring-boot:run
Ou no Windows:
mvnw.cmd spring-boot:run
-
A API estará disponível em:
http://localhost:8080 -
Documentação Swagger:
http://localhost:8080/swagger-ui.html
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| POST | /auth/register |
Cadastrar novo usuário | ❌ |
| POST | /auth/login |
Fazer login | ❌ |
| Método | Endpoint | Descrição | Autenticação |
|---|---|---|---|
| POST | /task |
Criar nova tarefa | ✅ |
| GET | /task/list |
Listar tarefas do usuário | ✅ |
| GET | /task/{id} |
Buscar tarefa por ID | ✅ |
| PUT | /task |
Atualizar tarefa | ✅ |
| DELETE | /task/{id} |
Excluir tarefa | ✅ |
| GET | /task/stats |
Estatísticas das tarefas | ✅ |
- GET /task/list:
completed(opcional):truepara tarefas concluídas,falsepara pendentespage(opcional): Número da página (padrão: 0)size(opcional): Tamanho da página (padrão: 10)sort(opcional): Campo para ordenação (padrão: id)
src/
├── main/
│ ├── java/com/sousaarthur/TaskFlow/
│ │ ├── Application.java # Classe principal
│ │ ├── controller/
│ │ │ ├── AuthenticationController.java # Endpoints de autenticação
│ │ │ └── TaskController.java # Endpoints de tarefas
│ │ ├── domain/
│ │ │ ├── task/
│ │ │ │ ├── Task.java # Entidade Task
│ │ │ │ └── TaskRepository.java # Repository JPA
│ │ │ └── user/
│ │ │ ├── User.java # Entidade User
│ │ │ ├── UserRepository.java # Repository JPA
│ │ │ └── UserRole.java # Enum de roles
│ │ ├── dto/
│ │ │ ├── AuthenticationDTO.java # DTO de login
│ │ │ ├── LoginResponseDTO.java # DTO de resposta do login
│ │ │ ├── RegisterDTO.java # DTO de registro
│ │ │ ├── TaskDTO.java # DTO de tarefa
│ │ │ └── TaskStatsDTO.java # DTO de estatísticas
│ │ ├── infra/
│ │ │ ├── CorsConfig.java # Configuração CORS
│ │ │ └── security/
│ │ │ ├── SecurityConfigurations.java # Configuração do Spring Security
│ │ │ ├── SecurityFilter.java # Filtro JWT
│ │ │ └── TokenService.java # Serviço de tokens JWT
│ │ └── service/
│ │ └── AuthorizationService.java # Serviço de autorização
│ └── resources/
│ └── application.yml # Configurações da aplicação
└── test/
└── java/com/sousaarthur/TaskFlow/
└── TaskFlowApplicationTests.java # Testes da aplicação
| Campo | Tipo | Descrição |
|---|---|---|
| id | VARCHAR (UUID) | Identificador único |
| login | VARCHAR | Nome de usuário |
| password | VARCHAR | Senha criptografada |
| role | VARCHAR | Papel do usuário (USER/ADMIN) |
| Campo | Tipo | Descrição |
|---|---|---|
| id | BIGINT | Identificador único |
| title | VARCHAR | Título da tarefa |
| description | TEXT | Descrição da tarefa |
| completed | BOOLEAN | Status de conclusão |
| created_at | TIMESTAMP | Data de criação |
| user_id | VARCHAR | ID do usuário (FK) |
As migrações do banco são gerenciadas pelo Flyway. Os scripts estão localizados em src/main/resources/db/migration/.
A API utiliza JWT (JSON Web Token) para autenticação:
- Registro: Crie uma conta via
POST /auth/register - Login: Faça login via
POST /auth/logine receba um token JWT - Autorização: Inclua o token no header:
Authorization: Bearer <token>
{
"sub": "usuario123",
"iat": 1640995200,
"exp": 1641081600
}curl -X POST http://localhost:8080/auth/register \
-H "Content-Type: application/json" \
-d '{
"login": "usuario",
"password": "senha123"
}'curl -X POST http://localhost:8080/auth/login \
-H "Content-Type: application/json" \
-d '{
"login": "usuario",
"password": "senha123"
}'curl -X POST http://localhost:8080/task \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN" \
-d '{
"title": "Estudar Spring Boot",
"description": "Aprender sobre controllers e repositories",
"completed": false
}'curl -X GET "http://localhost:8080/task/list?page=0&size=10" \
-H "Authorization: Bearer SEU_TOKEN"curl -X GET http://localhost:8080/task/stats \
-H "Authorization: Bearer SEU_TOKEN"Esta API foi desenvolvida para trabalhar com um frontend Angular rodando em http://localhost:4200. As configurações de CORS estão configuradas para permitir requisições desta origem.
Este projeto está licenciado sob a MIT License.
Desenvolvido por Arthur Sousa (@sousaarthur)
⭐ Se este projeto foi útil para você, considere dar uma estrela no repositório!