O Projeto consiste no desenvolvimento de uma API para cadastro e consulta de alunos, assim como suas matrículas e mensalidades.
Princípios/Técnicas/Conceitos utilizados:
- Clean Code
- SOLID
- Design Patterns
- Keep It Simple, Stupid (KISS)
- Don't Repeat Yourself (DRY)
Tecnologias/Ferramentas utilizadas:
- NodeJs
- NestJs
- Typescript
- TypeORM
- Swagger
O projeto foi desenvolvido com a utilização do Docker, junto ao Kool.
O Kool é uma ferramenta utlizada para simplificação do uso do Docker e padronização do ambiente de desenvolvimento frente a vários projetos e diferentes desenvolvedores. É recomendável a instalação do mesmo para execução do projeto, porém ela não é obrigatória.
git clone [email protected]:leonakaodev/billinho-api.git
- Clona o projeto para o seu computadorcd billinho-api
- Acessa o diretório recém criado do projeto
Usando Kool:
kool run setup
Apenas Docker:
cp .env.example .env
- Copia as variáveis de ambiente.docker-compose up --build -d
- Inicializa os containers em backgrounddocker exec billinho-api_app_1 yarn
- Instala as dependências via yarndocker exec billinho-api_app_1 yarn typeorm migration:run
- Executa as migrations do TypeOrm
Note: "billinho-api_app_1" é o nome do container que está rodando o app, em caso de erros, verifique se ele está correto.
Usando Kool:
kool start
Apenas Docker:
docker-compose up --build -d
Foi utilizado o swagger para documentar as rotas da aplicação, verifique: http://localhost:3000/api
O projeto atualmente consiste em uma arquitetura monolítica, aonde o Client acessa a API e posteriormente a API acessa o banco de dados. Essa única aplicação é responsável pelo cadastro dos alunos e das matrículas, ficando responsável também por gerar as mensalidades.
Visto que as matrículas não tem qualquer interação direta com os Alunos, é possível esta API em dois serviços distintos. Um para cadastro dos alunos e outro para criação das matrículas e mensalidades. Podendo ambos utilizarem o mesmo banco de dados, ou não.
Aleḿ dos diretórios padrões seguridos pelo Nest (Controllers, Services, Providers), foram criados mais 3 diretórios para organizar e separar as funcionalidades dentro do projeto:
- Repositories - Responsáveis por intermediar a relação entre a aplicação e o acesso/modificação do banco de dados
- Utils - Códigos mais simples que podem ser utilizados em diferentes locais da aplicação para realizar uma ação específica.
- Rules - Regras de validação customizadas, são utilizados durante a validação da requisição da API.
A fim de garantir as restrições especificadas para o projeto, a respeito das mensalidades geradas automaticamente, foram criados alguns testes:
# Using kool
kool run yarn test
# Using only docker
docker exec billinho-api_app_1 yarn test
Seguem em anexo algumas imagens demonstrando o funcionamento da aplicação: