Esse projeto está sendo construindo enquanto estudo outras tecnologias. E mais, é um projeto no qual estou testando algumas formas diferentes de construir meus projetos. Logo, eu sei cada conceito que apliquei aqui, estou apenas pensando um pouco fora da caixa e testando. Afinal DDD, TDD, BBB (rsrs) e qualquer outra abordagem, NÃO SÃO BALAS DE PRATA!
Este é um microserviço dedicado ao gerenciamento de pagamentos para o seu e-commerce.
- Por que tu não usa módulos gradle?
- Não vejo necessidade pra esse projeto.
- Por que não usa: domain, infraestructure, e afins?
- Não curto essa divisão.
- E porque...
- Como comentei acima, estou testando novas formas de codificar.
-
Processamento de Pagamentos: O microserviço é responsável por processar os pagamentos recebidos pelo e-commerce, garantindo uma transação segura e confiável.
-
Integração com Banco de Dados: Utiliza o Spring Data para interagir com o banco de dados PostgreSQL, garantindo a persistência e recuperação dos dados de pagamento de forma eficiente.
-
Ambiente Dockerizado: Todo o ambiente do microserviço, incluindo banco de dados, está contido em containers Docker, facilitando a implantação e escalabilidade.
-
Ambiente de Desenvolvimento com Spring H2: Durante o desenvolvimento, é possível utilizar o banco de dados em memória H2 fornecido pelo Spring, facilitando o teste e desenvolvimento local.
-
Comunicação Assíncrona com RabbitMQ: Utiliza o Spring RabbitMQ para comunicação assíncrona entre microserviços, garantindo uma arquitetura resiliente e escalável.
- Arquitetura
- DDD
- Entities
- Aggregates
- Value Objects (geralmente uso a nomeclatura 'primitives')
- Identifiers
- BaseRepositoryContract, InMemoryRepositoryContract, InMemoryRepository (implementação)
- Pagination Entity
- Search Direction Entity
- Artifacts
- Contém toda a lógica genéria e purista de um conceito dentro do domímio (ou subdomínio)
- Modules ou Bounded Contexts?
- Domain Repository, Domain Repository Contract, App Repository, App Repository Contract
- Domain Exception
- TDD
- Test First
- Arrange, Act, Assert (Given / When / Should)
- Unit Tests
- Integrated Tests
- e2e tests (WIP)
- Clean Architecture / Hexagonal (do meu jeito de fazer)
- Como estou usando CQRS (do meu jeito de fazer)
- Command Handler (mesmo que usecase);
- Query Handler (mesmo que usecase)
- Como estou usando CQRS (do meu jeito de fazer)
- CQRS
- Query Handlers
- Queries
- Command Handlers
- Commands
- API Docs
- OpenAPI
- Swagger
- Testes
- JUnit, Mockito
- WebMvcTest, JacksonTest, DataJpaTest
- Custom Annotations
- @MockMVC, @MockBean, @Mock, @InjectMock, @BeforEeach
- Serialização e Desserialização com Jackson e Object Mapper
- Java
- Spring Boot
- Spring Profiles
- Spring AMQP (WIP)
- Spring Data JPA
- Flyway / Migrations
- Gradle
- Docker
- Kubernetes (WIP)
- Postgres
- H2 Database
- RabbitMQ (WIP)
- JUnit, Mockito
- Rest Template (WIP)
- TestContainers (WIP)
- CI / CD (Github Actions, Docker Hub)
- Keycloak / Custom Identity Service (WIP)
- ElasticStack, DataDog, OpenTelemetry (WIP)
- Spring Cloud Gateway (WIP)
-
Clone o repositório deste microserviço.
-
Certifique-se de ter o Docker, PostgreSQL e RabbitMQ instalados e em execução.
-
Configure as variáveis de ambiente necessárias, como credenciais de banco de dados e RabbitMQ, conforme necessário.
-
Compile o projeto utilizando o Maven:
gradle
- Suba os containers:
docker compose up -d
Isso iniciará o microserviço de pagamentos juntamente com o banco de dados PostgreSQL e o serviço RabbitMQ.
Após a configuração e inicialização bem-sucedidas, o microserviço estará pronto para receber solicitações de pagamento do seu e-commerce. Certifique-se de integrar corretamente o seu e-commerce com este microserviço para processar pagamentos de forma eficaz.
Contribuições são bem-vindas! Se você encontrar problemas, bugs ou desejar adicionar novos recursos, sinta-se à vontade para abrir uma issue ou enviar um pull request.
Este projeto está licenciado sob a MIT License.
Este README oferece uma visão geral do seu microserviço de pagamentos e fornece instruções básicas sobre como configurar, executar e contribuir para o projeto. Certifique-se de personalizá-lo de acordo com as necessidades específicas do seu projeto e da sua equipe.