Cadastro de cedente e pagáveis.
Tema: Decisão de estrutura
Esta RFC propõe uma estrutura de projeto para a aplicação aprove-api
que prioriza o desacoplamento entre componentes e facilita a substituição de módulos individuais. A abordagem multiestágio e as boas práticas de arquitetura hexagonal garantirão a modularidade e escalabilidade da aplicação.
Motivação
Ao adotar uma abordagem que promova o desacoplamento e a substituição fácil de componentes, podemos responder às mudanças dos requisitos e tecnologias de forma ágil, sem impactar todo o sistema.
Proposta
project-folder/
|- src/
| |- application/
| | |- use cases
| | |- ...
| |- domain/
| | |- customer-enity.ts
| |- infra/
| | |- server
| | |- ...
| |- main.ts
Esta estrutura reflete a organização modular da aplicação, com foco em manter o desacoplamento e facilitar a substituição de componentes. A descrição dos módulos é a seguinte:
- controllers: Contém os controladores responsáveis por lidar com a interação entre as solicitações e os use cases de application.
- domain/: Este módulo abriga as regras de negócio relacionadas ao cliente. Essa camada inclui o serviços que encapsula a lógica de negócios e comportamentos.
- applications/: Representa a porta do mundo externo para o interno. É implementar a lógica de negócios da aplicação e coordenar a interação entre os diversos componentes do sistema.
- infra/: Camada interna e tem a responsabilidade de lidar com os detalhes de implementação e as interações com componentes externos.
- main.ts: Ponto de entrada da aplicação.
Benefícios
- Desacoplamento: A estrutura modular mantém as diferentes partes da aplicação isoladas, permitindo desenvolvimento independente e menos dependências.
- Substituição de Componentes: A modularidade facilita a substituição de módulos individuais, minimizando o impacto em outras partes do sistema.
- Manutenção Fácil de Regras de Negócio: Colocar as regras de negócio dentro do módulo de domínio promove uma organização clara e facilita a manutenção e evolução das regras.
Para criação desse projeto utilizamos as seguintes bibliotecas e framework
- TypeScript - Linguagem fortemente tipada
- Docker CE - Plataforma de deploy
- Jest - Framework de teste Javascript
Para execução deste step tenha nvm instalado em sua máquina e execute os comandos abaixo:
nvm use
npm install
Então execute o seguinte comando. Para execução local é preciso ter o docker instalado para que assim um MongoDB seja instânciado.
Tem uma /documents
que contem os curl
dos endpoint para a API.
npm run start:dev
Para executar a stack de testes basta executar o seguinte comando:
npm test
Para executar um teste específico fica assim:
npm run test:unit
npm run test:integration
npm run test:ci
Este projeto contém uma imagem Docker para geração de api-aprove.
Certifique-se de ter o Docker e docker-compose instalado em seu sistema.
- Crie a imagem:
docker build -t aprove-api .
- PORT: Porta na qual o servidor web ficará disponível (default: 3000);
- DATABASE_URL: URI para conexão com o mongodb;
Basta cópiar o arquivo .env.example
e renomear para .env
.
- Construa um contâiner
docker-compose up -d