Skip to content

Uma Api em NodeJS para área de saúde com testes automatizados e princípios solid

Notifications You must be signed in to change notification settings

quixote15/nodejs-api-saude

Repository files navigation

logo

NodeJs Api com testes E2E e principios Solid
👽

Open Source Love License: MIT

Testes de API

  • Deployed no Digital Ocean

Uma API para manutenção de laboratórios e exames feita em NodeJS + Supertest e Mocha


Instalação e execução

Pré-requisitos

O que tem nesse projeto

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.

Executando o projeto

Todos os comandos abaixo são feitos no terminal

Executando localmente

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

Executando com Docker

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.

Testes de API

Os testes foram realizados em utiliando TDD e foram principalmente teste end-to-end.

Executando os testes

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

Resultado

O resultado dos testes são apresentados no terminal e em report HTML gerado com NYC.

Arquitetura utilizada

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.

Dependências utilizadas

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.

Estrutura de diretórios

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

License

MIT License ©

About

Uma Api em NodeJS para área de saúde com testes automatizados e princípios solid

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published