Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release/1.0.0 #9

Merged
merged 29 commits into from
Mar 6, 2024
Merged

Release/1.0.0 #9

merged 29 commits into from
Mar 6, 2024

Conversation

diegosneves
Copy link
Owner

@diegosneves diegosneves commented Feb 17, 2024

Solicitação de Pull Request

Status

  • In Progress
  • Ready to Merging

Tipo

  • Release
  • Feature
  • Technical Debt
  • Fix
  • Test
  • Refactor
  • Documentation
  • Performance

Descrição

API Básica com Arquitetura Hexagonal

Essa API foi desenvolvida como uma implementação básica, porém robusta, utilizando o conceito de Arquitetura Hexagonal, também conhecida como Ports and Adapters. A finalidade desta API é ser usada em cenários didáticos e educacionais, proporcionando um exemplo prático e tangível do uso deste modelo de arquitetura em aplicações reais.

Este projeto pode servir como uma excelente base para entender melhor como a Arquitetura Hexagonal funciona, assim como os benefícios que ela pode trazer para o desenvolvimento de software.

Aproveite para aprender e adaptar este projeto de acordo com suas necessidades de aprendizado!

diegosneves and others added 8 commits February 3, 2024 18:16
…e Enumeração ProductStatus

- **Interface ProductContract:**
  * Foi adicionada uma nova interface chamada ProductContract que contém a declaração de métodos relacionados a um produto, como id, nome, preço, status e validade.

- **Enumeração ProductStatus:**
  * Foi introduzida uma nova enumeração chamada ProductStatus para gerenciar o status de um produto. O status pode ser habilitado ('enabled') ou desabilitado ('disabled').
…roductFactory`

- **Move ProductContract:** A interface `ProductContract` foi movida para o pacote da entidade do produto. A interface foi também expandida com comentários de documentação.

- **Adiciona ProductFactory:** Foi adicionada uma nova classe `ProductFactory` para criar instâncias da classe `Product`.

- **Modifica ProductStatus:** O enum `ProductStatus` foi modificado para incluir comentários de documentação e ser mais descritivo.
…Produto

- **Refatoração da Criação e Validação de Produto**
    - Removeu uma classe de teste não utilizada.
    - Modificou `ProductFactory` e `Product` para simplificar a criação do produto e adicionar verificações de validação.
- **Introdução ao Manipulador de Exceções**
    - Introduzido `ExceptionHandler` e `ProductException` para lidar com erros durante as operações do produto.
- **Adicionados Testes Rigorosos**
    - Testes completos foram adicionados para as novas verificações de validação do produto.
feat(M1 - Criação de Produto): ✨ Adição da Interface ProductContract e Enumeração ProductStatus
…validação de produtos com testes

- **Manipulação e Validação do Produto com Testes**
  - Introduzido `ProductService` e `ProductServiceContract` para gerenciamento de produtos, incluindo recuperação, criação, ativação e desativação.
  - Foram adicionados testes para `ProductService` em `ProductServiceTest`.
  - Foi adicionada uma nova fábrica de produtos em `ProductFactoryTest` para criação e validação de produtos.
…oductReader, ProductWriter e ProductPersistenceContract

- **Novas Interfaces**
  - Essas novas interfaces estabelecem o contrato para classes que lidam com operações de persistência para produtos.

- **Contrato de Persistência do Produto**
  - `ProductPersistenceContract` não contém nenhum método adicional, mas herda os de suas interfaces parentes, atuando essencialmente como uma interface de marcador.

- **Leitura e Escrita de Dados do Produto**
  - Os arquivos também incluem especificações para leitura e escrita de dados do produto com métodos associados.
…tion` aos métodos `ProductContract`

- Adicionando a cláusula `throws ProductException` aos métodos na interface `ProductContract`.
- Os métodos implementados na entidade `Product` também refletem essas mudanças respectivamente.

**Adicionar novos testes**

Os seguintes ajustes foram feitos para lidar com os novos cenários:

- Adicionados novos testes ao `ProductServiceTest`.
- Esses testes servem para validar os cenários em que `ProductException` pode ser lançada a partir da chamada do método de serviço.
feat(M2- Services e Persistências de dados) ✨
diegosneves and others added 3 commits February 28, 2024 19:31
…do ProductService para garantir a persistência dos dados**

- **Neste commit**, os métodos `create`, `enable` e `disable` no ProductService agora garantem a persistência dos dados ao chamar o método save da persistência.

- **Atualização do ProductServiceTest**: O ProductServiceTest também foi atualizado para validar esses cenários de acordo. Afirmações adicionais foram adicionadas aos testes para fortalecer a validade dos testes.
feat/M2-6(Refatoração dos testes da ProductService)
…d spring-boot-starter-data-jpa dependencies

- **Adicione as dependências PostgreSQL e spring-boot-starter-data-jpa**
  - As dependências PostgreSQL e spring-boot-starter-data-jpa foram adicionadas no arquivo pom.xml.

- **Atualize o arquivo application.yaml**
  - O arquivo application.yaml foi atualizado com os detalhes da conexão PostgreSQL.

Estas mudanças são necessárias para:

- **Integrar um banco de dados PostgreSQL com a aplicação Spring Boot**
  - A integração com o banco de dados PostgreSQL permite à aplicação Spring Boot interagir com esse banco de dados.

- **Utilizar o Spring Data JPA para interações com o banco de dados**
  - A dependência spring-boot-starter-data-jpa facilita as interações com o banco de dados, fornecendo um conjunto de ferramentas perspicazes e fáceis de usar.

- **Crie um arquivo docker-compose**
  - Um arquivo docker-compose também foi criado para inicializar o contêiner do banco de dados PostgreSQL.
  - Lembre-se que estamos usando o modelo mais atual de Compose.
@diegosneves diegosneves removed a link to an issue Feb 29, 2024
2 tasks
…n.yaml for PostgreSQL connection

- **Detalhes da Conexão:**
  - O `application.yaml` foi atualizado para esclarecer os detalhes da conexão com o PostgreSQL.
…, MapperStrategy, and related classes

**Adição de ProductEntity, MapperStrategy e classes relacionadas**

- **ProductEntity e ProductMapper:** Foram adicionadas as classes `ProductEntity` e `ProductMapper`.

- **Implementação da Interface MapperStrategy:** A interface `MapperStrategy` foi implementada.

- **Objetivo das Mudanças:** Essas mudanças visam criar um mapeamento entre o modelo de domínio e a entidade do banco de dados. A entidade do banco de dados, então, pode ser salva e recuperada usando o `ProductRepository`.

- **Nova Exceção:** Também foi adicionada uma nova mensagem de exceção para `ProductException`.
…y annotations from repository and service interfaces

- **Anotações Removidas:** As anotações `@Repository` e `@Service` foram removidas das interfaces `ProductReader`, `ProductWriter`, `ProductPersistenceContract` e da classe `ProductService`.
…de domínio e recursos relacionados para o pacote "app"

- Uma grande reestruturação dos pacotes foi realizada onde as classes de domínio e outros recursos relacionados foram movidos para o namespace "app".
- As classes que anteriormente estavam diretamente sob o namespace "hexagonal" agora são colocadas em "hexagonal.app".
- Esta reorganização é necessária para manter a modularidade e a gerenciabilidade e adere aos princípios da arquitetura hexagonal.
- Os imports necessários também foram atualizados para garantir consistência e compatibilidade.
diegosneves and others added 7 commits March 1, 2024 22:29
…ência H2 e para testes de integracao

- Neste commit, o banco de dados H2 é adicionado como uma nova dependência de teste no arquivo pom.xml.
- Em seguida, é criada uma classe ProductEntityMapper para auxiliar na mapeação entre Product e ProductContract.
- Além disso, o repositório de produtos (ProductRepository) foi aprimorado para lidar com casos nulos tanto na busca quanto na gravação de produtos.
- Por fim, um novo teste de integração para o ProductRepository foi adicionado para validar as alterações.
…ntityService e testes, atualiza ProductRepository e adiciona ProductRequest/Response

- **Adicione ProdutoEntityService e testes**: Esse commit introduz ProdutoEntityService que inclui a lógica de negócios para lidar com os produtos e os testes relacionados.

- **Atualização do ProdutoRepositório**: Foram realizadas pequenas atualizações no Produto e no ProdutoRepository para lidar com possíveis problemas com valores nulos e para melhorar o manuseio dos IDs únicos de produtos.

- **Adicione ProdutoRequisição/Resposta**: Ele também inclui a criação de classes ProdutoRequeste ProdutoResponseto para facilitar o tratamento de solicitações/respostas dentro do serviço.

- **Manipulação de exceções apropriadas**: A manipulação de exceções adequada foi adicionada para lidar com os casos em que o mapeamento entre as classes falha.
… classes to adapters directory

- The mapping classes, including `ProductEntityMapper`, `ProductMapper`, `MapperStrategy`, `BuilderMapper`, have been moved from the 'app' directory to the 'adapters' directory.

- As a consequence, all the paths of these classes imported in other classes have been updated too.

- This modification aims to maintain the architecture clean and improve the project organization.
…alidades de ativação e desativação ao ProductEntityService

- **Adição de funcionalidades de ativação e desativação ao ProductEntityService**
  - Foram adicionados métodos para ativar e desativar produtos dentro do ProductEntityService.

- **Testes Relacionados**
  - Os testes relacionados foram escritos em ProductEntityServiceTest.

- **Atualizações no ProductEntityServiceContract e ProductController**
  - Essas alterações também exigiram atualizações na interface do ProductEntityServiceContract, no ProductController e nas classes de Repositório para lidar com essas novas funcionalidades.

- **Melhorias na classe ProductMapper**
  - A classe ProductMapper foi aprimorada para acomodar essas mudanças.
…ocalizações dos pacotes web e handler

- **Refatoração das localizações dos pacotes web e handler**
    - Este commit move as classes CorsConfig, WebSecurityConfig e OpenApiConfig do pacote 'app.infrastructure.web' para o pacote 'adapters.config.web'.

- **Mover ControllerExceptionHandler**
    - O ControllerExceptionHandler também é movido de 'adapters.config' para 'adapters.config.handler' para se alinhar com a estrutura do projeto.

- **Melhora na clareza e manutenibilidade do código**
    - Essa reorganização melhora a clareza e a manutenibilidade do código.
…strutura de pacotes no módulo adaptador

* A estrutura de pacotes no módulo adaptador foi refatorada.
* As classes relacionadas à configuração web, manipulador e modelo foram movidas do pacote de serviço geral para subpacotes `Rest`.
* A refatoração melhora a clareza e a possibilidade de manutenção do código.
feat/M2-7(Criar interfaces para o banco de dados) ✨
diegosneves and others added 7 commits March 5, 2024 21:46
… para aplicativo

- **Adicionar Interface de Linha de Comando para a aplicação**
	- Foi adicionada uma Interface de Linha de Comando (CLI) para a aplicação com uma classe Menu para exibir e lidar com diferentes escolhas do usuário.

- **Criação do QuestionHandler Enum**
	- Criado um enum QuestionHandler para processar diferentes tipos de entrada do usuário.

- **Melhorar a usabilidade**
	- Essas adições permitirão que a aplicação seja usada de forma interativa a partir da linha de comando, melhorando a usabilidade.
feat/M3-12(Criação de Menu) ✨
…o do ProductEntityService

- Adicionado CLI (Interface de Linha de Comando) com uma classe Menu para o manuseio de escolhas do usuário.
- Adicionalmente, foi criado um novo enum QuestionHandler para gerenciar diferentes inserções do usuário.
- Finalmente, foi incorporada uma nova interface ProductEntityService para operações de serviço de produto.
  - Isso melhora a interatividade da aplicação a partir da linha de comando e melhora a usabilidade geral.
feat/M3-13(Criação da classe Product) ✨
…ementação de ProductEntityCLIMapper e classes relacionadas

- Implementada a classe ProductEntityCLIMapper para mapear e gerenciar a relação entre ProductEntity e ProductContract.

- Atualizada a classe ProductServiceImpl com a implementação dos métodos necessários como get(), create(), enable() e disable() para manipulação das entidades de produto.

- Adicionados casos de teste relacionados na classe ProductServiceImplTest para garantir a funcionalidade do código.

- Criadas as classes de repositório necessárias para a persistência de dados.
…ementação do mapper e repositório para a entidade product

- **Implementação da classe ProductEntityCLIMapper:** Esta classe é usada para mapear 'ProductEntity' e 'ProductContract'.

- **Atualização do ProductServiceImpl:** Atualizamos a classe 'ProductServiceImpl' para incluir as operações necessárias, tais como:
  - `get()`
  - `create()`
  - `enable()`
  - `disable()`

- **Criação de classes repositórias relacionadas:** Estas classes são usadas para persistência de dados.

- **Adição de testes no ProductServiceImplTest:** Testes foram adicionados para validar as implementações.
feat/M3-14(Criar regras para persistir os dados em um arquivo) ✨
@diegosneves diegosneves merged commit 3b9b4e6 into main Mar 6, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
release new release
Projects
None yet
1 participant