O TaskFlow permite que cada usuário crie, consulte, filtre, atualize e exclua suas próprias tarefas. A aplicação utiliza autenticação JWT stateless e aplica isolamento de dados no backend: uma tarefa só é localizada quando pertence ao usuário autenticado.
- API REST em Java 17 e Spring Boot.
- Autenticação JWT e senhas protegidas com BCrypt.
- DTOs específicos para entrada e saída; entidades JPA não são expostas pela API.
- Isolamento de tarefas por usuário no próprio acesso ao repositório.
- Angular standalone com interceptor HTTP para o Bearer token.
- Testes unitários, de repositório e de integração HTTP.
- Relatório de cobertura com JaCoCo e pipeline de CI no GitHub Actions.
- H2 no perfil de desenvolvimento e SQL Server + Flyway no perfil de produção.
flowchart LR
UI[Angular 20] -->|HTTP + JWT| API[Spring Boot REST API]
API --> SECURITY[Spring Security]
SECURITY --> SERVICES[Services]
SERVICES --> REPOSITORIES[Spring Data JPA]
REPOSITORIES --> DB[(H2 / SQL Server)]
TaskFlow-Backend/
└── src/
├── main/java/.../
│ ├── controller
│ ├── domain/dto
│ ├── domain/model
│ ├── domain/repository
│ ├── domain/configuration
│ └── service
└── test/java/.../
├── service
├── repository
└── integration
TaskFlow-Frontend/
└── src/app/
├── guards
├── interceptors
├── pages
└── services
- Cadastro e autenticação de usuário.
- CRUD de tarefas pessoais.
- Alteração rápida de status por endpoint
PATCH. - Filtros por texto, status e prioridade.
- Paginação disponível na API.
- Datas de vencimento, prioridade e status.
- Documentação interativa com Swagger UI.
| Método | Endpoint | Acesso | Finalidade |
|---|---|---|---|
POST |
/auth |
Público | Autenticar e emitir JWT |
POST |
/users |
Público | Criar conta |
GET |
/users/me |
Autenticado | Consultar o próprio perfil |
PUT |
/users/me |
Autenticado | Atualizar o próprio perfil |
DELETE |
/users/me |
Autenticado | Excluir a própria conta |
GET |
/tasks |
Autenticado | Listar tarefas do usuário |
GET |
/tasks/paged |
Autenticado | Listar tarefas com paginação |
GET |
/tasks/{id} |
Autenticado | Consultar uma tarefa própria |
POST |
/tasks |
Autenticado | Criar tarefa |
PUT |
/tasks/{id} |
Autenticado | Atualizar tarefa |
PATCH |
/tasks/{id}/status |
Autenticado | Alterar somente o status |
DELETE |
/tasks/{id} |
Autenticado | Excluir tarefa |
- Java 17+
- Node.js 22+
- npm
git clone https://github.com/Rafael-Bessa/TaskFlow.git
cd TaskFlowA API não possui segredos fixos no código. Defina uma chave com pelo menos 32 caracteres.
PowerShell
$env:JWT_SECRET="troque-por-uma-chave-segura-com-32-caracteres"Prompt de Comando
set JWT_SECRET=troque-por-uma-chave-segura-com-32-caracteresLinux/macOS
export JWT_SECRET="troque-por-uma-chave-segura-com-32-caracteres"No Windows:
cd TaskFlow-Backend
mvnw.cmd spring-boot:runNo Linux/macOS:
cd TaskFlow-Backend
./mvnw spring-boot:runO perfil padrão dev usa H2 e cria os dados em TaskFlow-Backend/data/.
- API:
http://localhost:8080 - Swagger:
http://localhost:8080/swagger.html - H2 Console:
http://localhost:8080/h2-console
Se você já executou uma versão anterior localmente e encontrar erro de schema, remova a pasta
TaskFlow-Backend/data/para recriar o banco H2 de desenvolvimento.
Em outro terminal:
cd TaskFlow-Frontend
npm ci
npm startAplicação: http://localhost:4200
cd TaskFlow-Backend
./mvnw verifyO relatório JaCoCo é gerado em:
TaskFlow-Backend/target/site/jacoco/index.html
A suíte foi organizada em três níveis:
- Unitários: regras dos services com Mockito.
- Repositório: consultas de propriedade e isolamento com
@DataJpaTest. - Integração: cadastro, login, JWT, CRUD e tentativa de acesso à tarefa de outro usuário com MockMvc.
cd TaskFlow-Frontend
npm run test:ci
npm run buildO relatório de cobertura do frontend é salvo em TaskFlow-Frontend/coverage/.
Ative o perfil prod e forneça as variáveis:
SPRING_PROFILES_ACTIVE=prod
JWT_SECRET=...
DB_URL=jdbc:sqlserver://...
DB_USERNAME=...
DB_PASSWORD=...
CORS_ALLOWED_ORIGINS=https://seu-frontend.example
As migrations SQL Server são aplicadas pelo Flyway.
- Nenhum hash de senha é retornado nos DTOs.
- Endpoints de perfil operam somente sobre o usuário autenticado.
- Consultas de tarefa incluem simultaneamente o ID da tarefa e o e-mail do proprietário.
- Recursos de outro usuário retornam
404, evitando revelar sua existência. - Segredos e credenciais são recebidos por variáveis de ambiente.
- Respostas de erro não expõem stack trace nem mensagens internas.

