O projeto de geração de faturas tem como objetivo fornecer uma solução para a criação de faturas relacionadas a contratos de pagamento. O contrato define os termos e condições do pagamento, e a fatura é gerada com base nesse contrato.
Existem duas formas de geração de faturas:
-
Pagamento à vista: Nesse caso, a fatura é gerada com o valor total do contrato a ser pago de uma só vez.
-
Pagamento parcelado: Nesse caso, a fatura é gerada com o valor total do contrato dividido em parcelas. Cada parcela possui uma data de vencimento e um valor específico.
A geração das faturas segue os padrões de projetos mencionados anteriormente, garantindo uma arquitetura flexível, modular e de fácil manutenção.
A arquitetura do projeto segue uma abordagem baseada em camadas, com a separação clara das responsabilidades. A estrutura do projeto é organizada da seguinte forma:
-
Camada de Aplicação: Responsável por lidar com a interação do usuário e a lógica da aplicação. Nesta camada, são implementados os controladores, as rotas e as views da interface web. Ela se comunica com a camada de domínio para executar as operações necessárias.
-
Camada de Domínio: Contém as regras de negócio e as entidades do domínio. Aqui são implementados os contratos, as faturas e as operações relacionadas a eles.
-
Camada de Infraestrutura: Responsável pela comunicação com elementos externos, como bancos de dados e serviços de terceiros. Aqui são implementados os adaptadores para acesso aos dados e a integração com o Kafka.
Os requisitos do projeto de geração de faturas são os seguintes:
- O sistema deve permitir a criação de contratos relacionados a pagamentos.
- Os contratos devem conter informações sobre o valor a ser pago, as datas de vencimento e outras informações relevantes.
- O sistema deve ser capaz de gerar faturas com base nos contratos existentes.
- As faturas podem ser geradas tanto com pagamento à vista quanto parcelado.
- No caso de pagamento parcelado, o sistema deve calcular o valor de cada parcela e definir suas respectivas datas de vencimento.
- As faturas geradas devem ser armazenadas e disponibilizadas para consulta.
- O sistema deve permitir a visualização das faturas geradas, bem como a busca por faturas específicas.
O design e a implementação do projeto de geração de faturas seguem as práticas e os padrões de projetos mencionados anteriormente. A estrutura do código-fonte é organizada de forma modular e coesa, facilitando a compreensão e a manutenção do sistema.
A comunicação entre as diferentes camadas do sistema é realizada através de interfaces bem definidas, seguindo o princípio de inversão de dependência. Isso permite uma maior flexibilidade na substituição de componentes e facilita os testes unitários.
As bibliotecas Flask e Kafka são utilizadas para fornecer a infraestrutura necessária para a criação da interface web e o processamento assíncrono de eventos, respectivamente.
O projeto adota as seguintes metodologias e design:
DDD (Domain-Driven Design): O projeto segue os princípios e conceitos do Domain-Driven Design (DDD), alinhando o design do software com as necessidades do domínio do problema. Isso promove uma melhor compreensão do negócio, modularidade e reutilização de código.
SOLID: Os princípios SOLID são aplicados no design do projeto, visando a criação de código coeso, flexível e de fácil manutenção. São seguidos os princípios SRP (Single Responsibility Principle), OCP (Open-Closed Principle), LSP (Liskov Substitution Principle), ISP (Interface Segregation Principle) e DIP (Dependency Inversion Principle). Isso garante a escalabilidade e extensibilidade do sistema.
Code Review: O projeto adota a prática de revisão de código, em que os desenvolvedores revisam e discutem o código uns dos outros. Isso contribui para a identificação de problemas, melhoria da qualidade do código e compartilhamento de conhecimento.
PR (Pull Request) Request Template: É utilizado um template de Pull Request para facilitar o processo de revisão de código. Esse template fornece um guia para documentar as alterações realizadas, os testes efetuados e outras informações relevantes.
Conventional Commits: O padrão de mensagens de commit Conventional Commits é adotado no projeto. Isso padroniza as mensagens de commit e facilita a geração de changelogs automáticos.
O projeto utiliza os seguintes padrões de projetos:
-
DTO (Data Transfer Object): Utilizado para transferir dados entre as diferentes camadas do sistema, encapsulando os dados em objetos simples e independentes da lógica de negócio.
-
Repository: Utilizado para abstrair o acesso aos dados, fornecendo uma interface comum para interagir com o banco de dados, desacoplando a lógica de negócio da implementação específica do mecanismo de armazenamento.
-
Adapter: Utilizado para adaptar a interface de uma classe existente para uma nova interface, permitindo que classes incompatíveis trabalhem juntas sem modificar o código existente.
-
Presenter: Utilizado para separar a lógica de apresentação da lógica de negócio, recebendo os dados do domínio e transformando-os em uma forma adequada para serem exibidos na interface do usuário.
-
Factory: Utilizado para encapsular a lógica de criação de objetos complexos, fornecendo uma interface para criar objetos de diferentes tipos e ocultando a lógica de criação.
-
Mediator: Utilizado para facilitar a comunicação entre diferentes componentes do sistema, definindo um objeto centralizado responsável por coordenar e controlar a interação entre os componentes, reduzindo o acoplamento e promovendo a flexibilidade.
O projeto de geração de faturas utiliza as seguintes bibliotecas:
-
Flask: Biblioteca em Python utilizada para desenvolvimento de aplicações web, fornecendo uma estrutura simples e flexível para criar aplicativos web eficientes e escaláveis.
-
Kafka: Plataforma de streaming distribuído utilizada para criação e processamento de streams de dados em tempo real. É utilizado neste projeto para o process
Download do projeto
git clone https://github.com/candidosouza/mba_fc_design_patterns.git && cd mba_fc_design_patterns
docker
docker-compose up -d
entrar no container kafka
docker compose exec kafka bash
criar o tópico
kafka-topics --create --bootstrap-server=kafka:9092 --topic=invoices_generated --partitions=3
criar o consumer
kafka-console-consumer --bootstrap-server=kafka:9092 --topic=invoices_generated
entrar no container app
docker compose exec app bash
rodar a migração
python src/core/invoice/infra/migrations/migrate.py
rodar flask
python ./src/core/app.py
no navegador
GET
http://localhost:8000/generate_invoices/?month=1&year=2022&type=accrual
POST
http://localhost:8000/generate_invoices/
{
"month": 1,
"year": 2022,
"type": "accrual"
}
ou
{
"month": 1,
"year": 2022,
"type": "cash"
}
Padrões de projetos para aplicações Enterprises
Este projeto consiste apenas em estudo e NÃO possui manutenção e suporte.
Este projeto consiste apenas em estudo e NÃO aceita contribuições.
Este projeto consiste apenas em estudo e NÃO possui licença.
O projeto de geração de faturas é uma aplicação de estudo que utiliza padrões de projetos e boas práticas de desenvolvimento. Ele visa fornecer uma solução flexível, modular e de fácil manutenção para a geração de faturas relacionadas a contratos de pagamento.
A aplicação dos padrões de projetos, a adoção das metodologias e a utilização das bibliotecas mencionadas contribuem para a criação de um sistema robusto, escalável e de alta qualidade.