Um aplicativo completo para gerenciamento de tarefas com backend em Spring Boot e frontend responsivo, permitindo organizar suas atividades de forma eficiente com autenticação segura e interface intuitiva.
- Visão Geral
- Funcionalidades
- Tecnologias
- Instalação e Execução
- Estrutura do Projeto
- API Endpoints
- Interface Web
- Segurança
- Contribuição
- Próximos Passos
- Licença
- Autor
O TodoList é uma aplicação web completa para gerenciamento de tarefas, permitindo que os usuários organizem suas atividades por prioridade e prazo. O sistema possui autenticação segura, interface responsiva e intuitiva, e uma API RESTful robusta construída com Spring Boot. O projeto implementa boas práticas de desenvolvimento como tratamento adequado de exceções, validações de dados e uma arquitetura organizada.
-
Usuários:
- Cadastro de novos usuários com validação de dados
- Autenticação segura via Basic Auth
- Perfil personalizado com histórico de atividades
- Proteção contra usuários duplicados
-
Tarefas:
- Criação de tarefas com título, descrição e prioridade
- Definição de prazos (data inicial e final) com validação automática
- Listagem filtrada por usuário autenticado
- Atualização de detalhes e status
- Organização por prioridade (ALTA, MÉDIA, BAIXA)
- Validação de datas e campos obrigatórios
-
Interface:
- Design responsivo e moderno utilizando Flexbox e Grid
- Animações e transições suaves para melhor experiência do usuário
- Dashboard intuitivo para gerenciamento de tarefas
- Notificações de feedback para ações do usuário
- Componentes personalizados e reutilizáveis
- Efeitos visuais como glassmorphism e cards elevados
- Java 17
- Spring Boot 3.4.4
- Spring Data MongoDB
- Spring Security
- Spring MVC para REST API
- Lombok para redução de boilerplate
- Maven para gerenciamento de dependências
- BCrypt para criptografia de senhas
- Tratamento global de exceções
- HTML5 semântico
- CSS3 (Animações, Flexbox, Grid, Variáveis CSS)
- JavaScript ES6+ com Fetch API
- Web Components para organização modular
- Design responsivo com media queries
- Animações e transições personalizadas
- MongoDB Atlas (Cloud)
- Índices otimizados para consultas frequentes
- VS Code para frontend
- IntelliJ IDEA para desenvolvimento Java
- Git/GitHub para controle de versão
- API DOG para testes de API
- Maven para build e dependências
- Java 17 ou superior
- Maven 3.8+
- MongoDB Atlas (ou MongoDB local na porta 27017)
- Navegador moderno (Chrome, Firefox, Edge)
- Git
- Clone o repositório:
git clone https://github.com/seu-usuario/todolist.git
cd todolist
- Configure o MongoDB:
Edite o arquivo src/main/resources/application.properties
:
spring.data.mongodb.uri=sua-string-de-conexao-mongodb
spring.data.mongodb.database=todolist
api.security.token.secret=seu-segredo-para-tokens
- Compilação e execução:
mvn clean install
mvn spring-boot:run
- Acesse a aplicação:
Abra o navegador e acesse: http://localhost:8080
Se preferir usar Docker:
docker build -t todolist-app .
docker run -p 8080:8080 todolist-app
src/
├── main/
│ ├── java/com/isaacggr/todolist/
│ │ ├── config/ # Configurações do Spring e CORS
│ │ ├── errors/ # Tratamento global de exceções
│ │ ├── filter/ # Filtros de autenticação
│ │ ├── task/ # Controladores e modelos de tarefas
│ │ ├── user/ # Controladores e modelos de usuários
│ │ ├── utils/ # Classes utilitárias e helpers
│ │ └── TodolistApplication.java # Classe principal
│ │
│ └── resources/
│ ├── static/ # Arquivos frontend (HTML, CSS, JS)
│ │ ├── index.html # Página principal
│ │ ├── script.js # Lógica JavaScript
│ │ └── style.css # Estilos e animações
│ └── application.properties # Configurações da aplicação
└── test/ # Testes unitários e de integração
Todas as rotas de tarefas requerem autenticação via Basic Auth.
-
POST
/users/
- Criar novo usuárioCorpo da requisição:
{ "name": "Seu Nome", "username": "seu.usuario", "password": "sua-senha" }
Resposta (201 Created):
{ "id": "user-uuid", "name": "Seu Nome", "username": "seu.usuario", "createdAt": "2025-04-20T14:30:00" }
Possíveis erros:
- 400 Bad Request - Dados inválidos ou incompletos
- 409 Conflict - Nome de usuário já existe
-
POST
/tasks/
- Criar nova tarefaCorpo da requisição:
{ "title": "Título da Tarefa", "description": "Descrição detalhada da tarefa", "priority": "ALTA", "startAt": "2025-04-20T10:00:00", "endAt": "2025-04-20T18:00:00" }
Resposta (201 Created):
{ "id": "task-uuid", "title": "Título da Tarefa", "description": "Descrição detalhada da tarefa", "priority": "ALTA", "startAt": "2025-04-20T10:00:00", "endAt": "2025-04-20T18:00:00", "createdAt": "2025-04-18T14:30:00", "userId": "user-uuid" }
-
GET
/tasks/
- Listar tarefas do usuário autenticadoResposta (200 OK):
[ { "id": "task-uuid-1", "title": "Título da Tarefa 1", "description": "Descrição detalhada da tarefa 1", "priority": "ALTA", "startAt": "2025-04-20T10:00:00", "endAt": "2025-04-20T18:00:00", "createdAt": "2025-04-18T14:30:00" }, { "id": "task-uuid-2", "title": "Título da Tarefa 2", "description": "Descrição detalhada da tarefa 2", "priority": "MÉDIA", "startAt": "2025-04-21T09:00:00", "endAt": "2025-04-21T17:00:00", "createdAt": "2025-04-18T15:45:00" } ]
-
GET
/tasks/{id}
- Buscar tarefa específicaResposta (200 OK):
{ "id": "task-uuid", "title": "Título da Tarefa", "description": "Descrição detalhada da tarefa", "priority": "ALTA", "startAt": "2025-04-20T10:00:00", "endAt": "2025-04-20T18:00:00", "createdAt": "2025-04-18T14:30:00", "userId": "user-uuid" }
-
PUT
/tasks/{id}
- Atualizar tarefa existenteCorpo da requisição:
{ "title": "Título Atualizado", "description": "Descrição atualizada da tarefa", "priority": "MÉDIA" }
Resposta (200 OK):
{ "id": "task-uuid", "title": "Título Atualizado", "description": "Descrição atualizada da tarefa", "priority": "MÉDIA", "startAt": "2025-04-20T10:00:00", "endAt": "2025-04-20T18:00:00", "createdAt": "2025-04-18T14:30:00", "updatedAt": "2025-04-19T09:15:00" }
-
DELETE
/tasks/{id}
- Excluir tarefaResposta (204 No Content)
Códigos de Erro Comuns:
- 400 Bad Request - Dados inválidos
- 401 Unauthorized - Usuário não autenticado
- 403 Forbidden - Usuário sem permissão para acessar a tarefa
- 404 Not Found - Tarefa não encontrada
- 500 Internal Server Error - Erro do servidor
A interface do usuário foi desenvolvida com foco em:
- Design Responsivo: Adaptável para dispositivos móveis e desktop
- UX Intuitiva: Fluxos simples para cadastro, login e gerenciamento de tarefas
- Animações Suaves: Efeitos de transição e feedback visual para melhor experiência
- Acessibilidade: Elementos semânticos e navegação por teclado
- Login e Cadastro com validações em tempo real
- Dashboard com visão geral das tarefas
- Criação/Edição de Tarefas com formulários intuitivos
- Perfil do Usuário (em desenvolvimento)
- Autenticação: Basic Auth implementado via filtro personalizado
- Criptografia: Senhas protegidas com BCrypt (nunca armazenadas em texto puro)
- Validação: Dados validados tanto no cliente quanto no servidor
- Propriedade: Usuários só podem manipular suas próprias tarefas
- Proteção contra Ataques:
- XSS: Sanitização de inputs e escape de caracteres
- CSRF: Proteção contra requisições forjadas
- Injeção: Validação rigorosa de dados de entrada
- Headers de Segurança: Implementados para proteção adicional
Contribuições são bem-vindas! Para contribuir:
- Faça um fork do projeto
- Crie sua branch de feature (
git checkout -b feature/nova-funcionalidade
) - Commit suas mudanças (
git commit -m 'Adiciona nova funcionalidade'
) - Push para a branch (
git push origin feature/nova-funcionalidade
) - Abra um Pull Request
- Implementação de modo escuro completo (estrutura CSS já preparada)
- Sistema de notificações para tarefas com prazo próximo
- Compartilhamento de tarefas entre usuários
- Funcionalidade de repetição para tarefas recorrentes
- Aplicativo mobile com React Native
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Isaac Gregorio
⌨️ com ❤️ por Isaac Gregorio | Powered by Rocketseat 🚀
Última atualização: 20 de abril de 2025