Esse projeto foi desenvolvido com o objetivo aplicar os conhecimentos adquiridos sobre arquitetura de software. Foram aplicados conceitos baseados na Clean Architecture para a separação das camadas da aplicação.
O projeto está organizado com os seguintes camadas e diretórios:
Camada onde são implementadas as regras de negócio.
Diretório que contêm a classes que representam as entidades da aplicação. Os métodos dessas classes implementam as regras de negócio da aplicação.
Diretório que contêm as classes que implementam o comportamento das funcionalidades. Essas classes são responsáveis controlar todo o fluxo de execução, construir as entidades a partir dos dados providos, realizar a chamadas para a execução das regras de negócio e aciona a camada de infraestrutura para interagir com o "mundo externo".
Camada que abstrai a comunicação com o mundo externo como banco de dados, interfaces de API, comunicação com serviços externos e etc.
Diretório que contêm os controllers que processam as solicitações HTTP de entrada e envia resposta de volta ao cliente.
Diretório que contêm os repositórios para acesso a dados da base de dados e serviços externos.
Camada onde são implementadas as configurações para rodar o servidor HTTP utilizando o framework web escolhido e a conexão com a base de dados.
Diretório que possui o arquivo responsável por inicializar a aplicação.
Diretório com as configurações das variáveis de ambiente do projeto.
Diretório onde estão definidos os cenários com as regras de negócio e a automação dos testes de integração de mais alto nível. Testes unitários e testes de integração com a base de dados estão implementados nos demais diretórios do projeto.
Foi construída uma aplicação de gerenciamento de matriculas para cursos em uma escola. A aplicação provê uma API REST onde é possível realizar as seguintes operações:
- Matricular um aluno;
- Recuperar um matrícula já cadastrada;
- Realizar pagamento de uma matrícula;
- Cancelar uma matrícula.
- Tenha instalado NodeJS ou Docker na sua máquina.
- É possível substituir as configurações padrões criando um arquivo .env, seguindo o exemplo do arquivo .env-example. As seguintes configurações podem ser definidas:
- Node:
NODE_ENV
Ambiente em que será executada a aplicaçãotest|development|production
- Server:
PORT
Número da porta em que deseja rodar o servidor HTTP
- Logger (Pino)
LOG_LEVEL
Especifica o nível dos logs a serem exibidosfatal|error|warn|info|debug|trace|silent
LOG_PRETTY_PRINT
Ativa ou desativa formatação dos logstrue|false
- Base de dados (PostgreSQL)
POSTGRES_HOST
Endereço IP para conexão com uma base de dados (não é necessário especificar caso inicializar a aplicação via Docker Compose)POSTGRES_DATABASE
Especifica nome da base de dadosPOSTGRES_USER
Especifica usuário para acesso a base de dadosPOSTGRES_PASSWORD
Especifica senha para acesso a base de dadosPOSTGRES_PORT
Especifica porta para conexão com a base de dados
- Administrador da base de dados (pgAdmin)
PGADMIN_DEFAULT_EMAIL
Especifica o email de acesso ao administrador da base de dadosPGADMIN_DEFAULT_PASSWORD
Especifica a senha de acesso para administrador da base de dadosPGADMIN_PORT
Especifica a porta de acesso para administrador da base de dados
docker compose up
Neste modo de inicialização serão inicializados localmente containers para o servidor da aplicação, para a base de dados PostgreSQL e para o pgAdmin. Desta maneira não é necessário configurar a base de dados de forma independente.
npm i
npm run build
npm run start
Nota: Neste modo de inicialização é necessário definir os valores para as variáveis de ambiente relacionadas a base de dados no arquivo .env
.
Os comandos a seguir podem ser executados em um ambiente com o NodeJS instalado e após instalar as dependências do projeto (npm i
).
Comando | Descrição |
---|---|
npm run start |
Inicializa aplicação |
npm run build |
Executa o build do projeto transpilando o código em TypeScript |
npm run test |
Executa todos os testes unitários e de integração do projeto* |
npm run test:unit |
Executa os testes unitários |
npm run test:integration |
Executa os testes de integração* |
npm run test:feature |
Executa os cenários de testes de aceitação das funcionalidades da aplicação* |
npm run test:coverage |
Gera relatório de coberta dos testes unitários e de integração do projeto* |
npm run lint |
Executa validação de lint nos arquivos de código fonte do projeto |
*
Necessário possuir conexão com uma base de dados
- Documentação de API;
- Adicionar logs;
- Rollback de querys na base de dados;
- Aumentar cobertura de testes