- Deployed no Digital Ocean
Uma API para manutenção de laboratórios e exames feita em NodeJS + Supertest e Mocha
O objetivo desse projeto é construir uma API para manutenção de laboratórios e exames. O que tem até agora:
features | status |
---|---|
API RESTful NodeJS | ✅ |
CRUD Exames | ✅ |
CRUD Laboratórios | ✅ |
Associar um exame a um laboratório | ✅ |
Desassociar um exame a um laboratório | ✅ |
Busca laboratório por nome de exame | ✅ |
Documentaçao da Api com swagger & JSDOCS | ✅ |
Api configurada com Docker & docker-compose | ✅ |
Api publicada no Digital ocean | ✅ |
Script de deploy da Api | ✅ |
TODO: Adicionar a possibilidade de executar cadastro, atualização e remoção em lote. Atualmente estou com um Mac de apenas 128gb de ssd e não consigo espaço suficiente para subir muitos containers docker. Visto que a solução que desejo implantar essa feature é com background jobs usando Redis & Bull.
Todos os comandos abaixo são feitos no terminal
1 - Faça um clone do repositório e acesse o diretório criado pelo clone.
git clone https://github.com/quixote15/nodejs-api-saude.git && cd nodejs-api-saude
2 - Com o Node v14+ já instalado em sua máquida, execute:
npm run start
Ao rodar o ambiente localmente, é necessário ter node instalado, gerenciar e verifica problemas de versões de dependencias, ter uma instancia de um banco MongoDb rodando e configurar as variáveis de ambiente no arquivo .env
1 - Faça um clone do repositório e acesse o diretório criado pelo clone.
git clone https://github.com/quixote15/nodejs-api-saude.git && cd nodejs-api-saude
2 - Com o docker e docker Compose já instalado em sua máquida, execute:
docker-compose up
Após isso é só aguardar o docker subir os container e pronto. A api estará disponível em localhost:3000
.
Caso você não tenha o docker e docker-compose instalado pode utilizar o seguinte script para salvar alguns minutos ou até horas:
curl https://raw.githubusercontent.com/quixote15/deploy-scripts/master/install-api-saude.sh | sh
install-api-saude.sh faz o seguinte:
- Instala o Docker
- Instala o Docker Compose
- Instala o NodeJS
- Instala o npm
- Clona o projeto Api Saude NodeJS
O script acima é util quando existem mais de um ambiente de deployment ou compartilhamento entre diversas pessoas no time. Garante compatibilidade e agilidade no setup. O código fonte de está aqui.
Os testes foram realizados em utiliando TDD e foram principalmente teste end-to-end.
Para executar os testes localmente (http://localhost:3000) é preciso subir o ambiente local utilizando NPM ou Docker. Após isso execute:
npm test
Para gerar o relatório de cobertura de testes execute:
npm test:cov
O resultado dos testes são apresentados no terminal e em report HTML gerado com NYC.
Para essa api foi utilizada a arquitetura MVC que divide a aplicaçao em três partes. O Model, a View e o Controller. Além disso, principios S.O.L.I.D estão presentes em todo projeto visando reduzir a complexidade do código, o acoplamento entre classes, separar responsabilidades e definir muito bem as relações entre elas.
O S.O.L.I.D é um acrônimo que representa cinco princípios da programação orientada a objetos e design de código teorizado por Robert C. Martin.
[S]ingle Responsibility Principle (Princípio da Responsabilidade Única) [O]pen/Closed Principle (Princípio do Aberto/Fechado) [L]iskov Substitution Principle (Princípio da Substituição de Liskov) [I]nterface Segregation Principle (Princípio da Segregação de Interfaces) [D]ependency Inversion Principle (Princípio da Inversão de Dependências)
Além disso, explorei alguns design parterns como o Builder, factory e o Generic repository.
lib | descrição |
---|---|
NodeJs 14+ | Versão do NodeJS |
Supertest | Biblioteca de automação de API |
Mocha | Estrutura (describe , it , etc) e runner da automação |
NYC | relatórios de cobertura de testes |
Cross-env | Criação de variável de ambiente |
As dependências estão definidas no package.json.
api-project/
├─ src/
| ├─ config
| └─ controllers
| └─ domain
| └─ interfaces
| └─ models
| └─ repository
| └─ services
| └─ utils
├─ tests/
| ├─ e2e*/
| ├─ api.test.js
├─ docs/
└─ package.json
- 📁 src/config: Dir com as variáveis e classes que configuram e inicializam do ambiente (ex.: conexao com banco de dados)
- 📁 src/controllers: Dir com Controllers responsáveis pelos endpoints
- 📁 src/domain: Dir com domain entities e lógica de negócio
- 📁 src/models: Dir com models e schemas
- 📁 src/repository: Dir com adapters para operaçoes no banco de dados
- 📁 src/services: Dir com services que precisem executar alguma regra de negócio
- 📁 src/utils: Dir com classes e metodos utilitários em geral
- 📁 tests/: Dir com os testes das rotas e arquivos que auxiliam a automação
- 📃 package.json: Arquivo com informações das dependências do projeto, licença, scripts, autor, etc. Para saber mais clique aqui