Skip to content

Perolanegra/novadata_exam

Repository files navigation

Novadata Exam

O projeto foi gerado com o docker utilizando o docker compose para gerenciar os containers.
Certifique-se de ter o docker instalado e estar usando pelo menos a versão 18 do Nodejs.
Rode o seguinte comando para garantir a equivalência do lock json file ao baixar as libs: npm ci


Subindo e requisitando o Servidor

  • (Windows) Para subir o servidor em modo de log (+ aconselhável) rode o seguinte comando no CMD: npm run sw:log.
  • (Linux) Para subir o servidor em modo de log (+ aconselhável) rode o seguinte comando npm run sl:log.
  • Para subir o servidor sem o docker (- aconselhável) rode o seguinte comando npm run dev.
  • (Windows) Para subir o servidor em modo detached rode o seguinte comando npm run start:windows. Para matar as instancias dos containers navegue até a raiz e rode docker compose stop
  • (Linux) Para subir o servidor em modo detached rode o seguinte comando npm run start:linux. Para matar as instancias dos containers navegue até a raiz e rode docker compose stop

OBS: Se o servidor não conectou ao banco, provavelmente o ip local está diferente da assinatura do link simbólico, para checar, mesmo com o erro no terminal com a instância ativa, em outro terminal rode o seguinte comando para identificar o IP em que está rodando a instância do mongodb: docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' id, onde id seria o id da imagem podendo ser consultada através do docker ps.
Após checar o IP, substitua a keyword localhost pelo IP, preservando a porta: 27017 no arquivo .env do projeto, em sequência mate a instância utilizando o CTRL+C e rode o server novamente
.

Testando os Endpoints com o CURL

  • Certifique-se de ter o curl instalado em sua máquina.
  • Para realizar as requests manualmente navegue até a pasta curl, e execute em seu terminal após o server iniciado.
  • Verifique cada request para enviar os parâmetros de cada endpoint, a estrutura já está montada, só é necessário informar o valor do parâmetro. (Caso não queira mudar os parâmetros, só é preciso se atentar as requests de get_posts_by_authorId e get_posts_by_categoryId, pois será necessário informar os respectivos ID's, os dois podendo ser consultados após persistir uma categoria ou um usuário-author)
  • Para rodar de forma automatizada via shell/bash as requests, vá até o caminho raiz do projeto e abra o terminal, em sequência rode o seguinte comando: npm run req curl/<SUA_REQUEST_AQUI>, podendo escolher qual irá rodar, por exemplo para obter os posts rode: npm run req curl/get_posts.txt
  • Para rodar as requests fora do curl, pode utilizar qualquer outro (Postman), com os mesmos parâmetros, se atentando para a configuração de headers, queries & body.

Tech Through

  • Foi utilizado o mongodb para persistência de dados juntamente com o mongoose para lidar com as database requests.
  • Foi utilizado o multer middleware para o processamento em persistir a imagem em uma pasta na aplicação.
  • Foi utilizado o sharp para o processamento da imagem com relação a minificação.
  • Foi utilizado o concurrently para garantir a execução de dois ou mais comandos para rodar os scripts do projeto.
  • Foi implementada a classe CacheMiddleware para lógica da persistência temporária do dado em memória a fim de uma simples demo. Soluções alternativas para maior escalabilidade a depender da quantidade de dados o Reddis poderia ser uma boa opção.
  • Foi implementada uma classe Utils onde centraliza algumas lógicas que podem ser úteis a aplicação, como por exemplo assinar os valores das variáveis de ambiente ao objeto process do node.
  • A lógica dos endpoints foram segregadas em cada controller respectivamente, centralizada em uma classe que pertence a respectiva entidade no mongoose.
  • Foi implementada um routes file separado com suas devidas constraints para centralizar as rotas da aplicação.

Demo

Demo

Testes Unitários

Nenhum teste unitário foi implementado.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published