O SCRUM-API é uma API para gerenciamento de projetos baseada no framework Spring Boot e utilizando um banco de dados PostgreSQL. Essa API foi desenvolvida para auxiliar na gestão de projetos seguindo a metodologia SCRUM, permitindo o controle de usuários, projetos, sprints, backlog e tarefas de forma eficiente. Durante o desenvolvimento, o principal foco e a prática da arquitetura limpa no código, separando entre camadas assim desacoplando as regras de negócio do framework.
- Criar CRUD para usuários
- Tratamento de exceções
- Criar um sistema de login e autenticação
- Criar feat projetos
- Criar relação entre usuário e projeto (ManyToMany)
- Endpoints de adicionar/remover usuário do projeto
-
Framework
- UserController: Controlador responsável por receber as requisições do cliente. Usa o UserService para realizar as operações de criação, leitura, atualização e deleção de usuários.
-
Ports
- UserService: Serviço que coordena os casos de uso. Ele chama diferentes casos de uso para realizar operações específicas.
- CreateUserUseCase
- ReadUserUseCase
- UpdateUserUseCase
- DeleteUserUseCase
- UserService: Serviço que coordena os casos de uso. Ele chama diferentes casos de uso para realizar operações específicas.
-
UseCases
- CreateUserUseCaseImpl: Implementação do caso de uso para criar um usuário.
- ReadUserUseCaseImpl: Implementação do caso de uso para ler um usuário.
- UpdateUserUseCaseImpl: Implementação do caso de uso para atualizar um usuário.
- DeleteUserUseCaseImpl: Implementação do caso de uso para deletar um usuário.
- Interfaces:
- CreateUserUseCase: Define o contrato para criar um usuário.
- ReadUserUseCase: Define o contrato para ler um usuário.
- UpdateUserUseCase: Define o contrato para atualizar um usuário.
- DeleteUserUseCase: Define o contrato para deletar um usuário.
-
Entity
- User: Classe que representa o domínio do usuário com atributos como id, nickname, email, password, name, profile_picture.
-
Repository
- UserRepositoryPort: Porta de interface que define as operações de persistência de usuário.
- JpaUserRepositoryAdapter: Adaptador que implementa a UserRepositoryPort e usa o JpaUserRepository para interagir com o banco de dados.
- UserMapper: Classe responsável por mapear entre User e UserEntity.
-
Persistence
- JpaUserRepository: Repositório JPA para operações de banco de dados com a entidade UserEntity.
- UserService: É a camada de serviço que expõe métodos para cada operação de usuário. É um ponto central onde as chamadas de controlador são delegadas para os casos de uso específicos.
- UseCases: Implementações específicas para cada caso de uso, segregando a lógica de negócio específica.
- UserRepositoryPort: Interface que define as operações de persistência, implementada pelo adaptador JPA.
- JpaUserRepositoryAdapter: Adaptador que implementa a UserRepositoryPort, lidando com a persistência real usando JPA e mapeando entidades.
- Controladores (Controllers) lidam com a entrada e saída.
- Serviços (Services) coordenam os casos de uso.
- Casos de Uso (UseCases) contêm a lógica de negócio específica.
- Repositórios (Repositories) lidam com a persistência de dados.
Essa separação de responsabilidades facilita a manutenção, testes e evolução do sistema.