Skip to content

Latest commit

 

History

History
106 lines (84 loc) · 4.69 KB

README.md

File metadata and controls

106 lines (84 loc) · 4.69 KB

Desafio Anlix

Repositório onde foi feita a implementação do desafio proposto pela anlix-io. Este projeto foi desenvolvido com Node.js para implementar uma base de dados Postgres utilizando a biblioteca Sequelize como ORM.

Status do Projeto : Finalizado

Badge

Tabela de Conteúdo

  1. Requisitos
  2. Instalação
  3. Configuração
  4. Uso
  5. Arquitetura
  6. Funcionalidades
  7. Endpoints

Requisitos

Para rodar este projeto é necessário ter instalados o nodejs, npm e algum banco de dados entre PotgreSQL, MariaDB, MySQL e SQLite. É possível também rodar através do docker compose.

Instalação

  • Repositório Git Clone o repositório
$ git clone https://github.com/joaomarcosh/desafio-anlix
  • Dependências Instale as dependências necessárias
$ cd desafio-anlix
$ npm install

O comando install não é necessário se decidir rodar o projeto com o docker.

Configuração

No backend, temos que criar um banco de dados para a nossa aplicação, assim como configurar o arquivo .env. Além disso, também é necessário migrar e seedar os dados para o banco de dados. Segue o passo a passo.

  • Banco de dados Abaixo são apresentados os comandos para criar uma base de dados Postgres.

  • Comandos no bash.

$ createdb <nome_do_banco>;
  • Comandos no psql
$ CREATE DATABASE <nome_do_banco>;
  • Crie o arquivo .env Copie o conteúdo do arquivo de exemplo .envExemplo e renomeie para .env

  • Configure o arquivo .env Adicione as informações necessárias para o backend rodar *Não é necessario caso use o docker

DB_username = <nome_usuario>
DB_password = <senha>
DB_database = <nome_do_banco>
DB_host = 127.0.0.1
DB_dialect = <tipo_do_banco> # postgres || mysql || mariadb || sqlite
PORT = 3000

Uso

  • Docker Caso tenha o docker, o projeto pode ser utilizado com o comando
$ docker compose up
  • Terminal Para rodar o projeto a partir do terminal, siga as instruções
$ node src/server.js

Para criar e popular as tabelas, acesse o endpoint /seed

Por fim, abra a URL localhost:PORT/dashboard.html, onde PORT é a porta definida no arquivo .env (padrão 3000), no browser de escolha.

Arquitetura

  • O banco de dados conta com três tabelas: Pacientes, Leituras e Tipos_Leituras. As tabelas Pacientes e Tipos_Leituras possuem uma relação one-to-many com a tabela Leituras, de forma que um paciente e um tipo de leitura pode possuir n leituras, e uma leitura só pode estar associada a um único paciente e um único tipo de leitura;

  • Para popular o banco de dados, foi criado um Seeder. O Seeder primeiro faz um BULK INSERT dos dados dos pacientes, contidos em um único arquivo JSON, na tabela Pacientes. Após os pacientes é feita a criação dos tipos de leituras a partir do nome dos diretórios onde os arquivos de leituras estão inseridos. Por fim, para popular a tabela de leituras, o Seeder percorre todos os arquivos nos diretórios e faz um SELECT para cada leitura a fim de encontrar o ID do paciente e fazer a inserção dos dados na tabela.

Funcionalidades

  • Consultar, para cada paciente, cada uma das características individualmente e cada uma delas sendo a mais recente disponível;
  • Consultar em uma única chamada, todas as características de um paciente, com os valores mais recentes de cada uma;
  • Consultar para uma determinada data (dia, mês e ano), todas as características existentes de todos os pacientes da base de dados;
  • Consultar uma característica qualquer de um paciente para um intervalo de datas a ser especificado na chamada da API;
  • Consultar o valor mais recente de uma característica de um paciente que esteja entre um intervalo de valores;
  • Consultar pacientes que contenham um nome ou parte de um nome a ser especificado na chamada da API;
  • Buscar um paciente por nome e exibir o valor mais recente de cada uma de suas características;
  • Ser possível exportar as características de um ou mais pacientes de todas as datas disponíveis para um arquivo CSV;
  • Exibir um gráfico temporal para um determinado paciente e uma determinada característica a ser inserida através da interface.

Endpoints

O projeto contém um arquivo chamado Desafio-Anlix.postman_collection para importar uma coleção de endpoints no programa Postman.