Skip to content

Latest commit

 

History

History
94 lines (61 loc) · 5.66 KB

challenge.md

File metadata and controls

94 lines (61 loc) · 5.66 KB

NodeJs Challenge 20201030

Introdução

Nesse desafio trabalharemos no desenvolvimento de uma REST API para utilizar os dados do projeto Open Food Facts, que é um banco de dados aberto com informação nutricional de diversos produtos alimentícios.

O projeto tem como objetivo dar suporte a equipe de nutricionistas da empresa Fitness Foods LC para que eles possam revisar de maneira rápida a informação nutricional dos alimentos que os usuários publicam pela aplicação móvel.

Antes de começar

  • Prepare o projeto para ser disponibilizado no Github, copiando o conteúdo deste repositório para o seu (ou utilize o fork do projeto e aponte para o Github). Confirme que a visibilidade do projeto é pública (não esqueça de colocar no readme a referência a este challenge);
  • O projeto deve utilizar a Linguagem específica na sua Vaga (caso esteja se candidatando). Por exempo: Python, R, Scala e entre outras;
  • Considere como deadline 5 dias a partir do início do desafio. Caso tenha sido convidado a realizar o teste e não seja possível concluir dentro deste período, avise a pessoa que o convidou para receber instruções sobre o que fazer.
  • Documentar todo o processo de investigação para o desenvolvimento da atividade (README.md no seu repositório); os resultados destas tarefas são tão importantes do que o seu processo de pensamento e decisões à medida que as completa, por isso tente documentar e apresentar os seus hipóteses e decisões na medida do possível.

Instruções iniciais obrigatórias

  • O projeto back-end deverá ser desenvolvido usando em NodeJS
  • Documentação para configuração do projeto em ambientes de produção (como instalar, rodar e referências a libs usadas);

O projeto

  • Criar um banco de dados MongoDB usando Atlas: https://www.mongodb.com/cloud/atlas ou algum Banco de Dados SQL se não sentir confortável com NoSQL;
  • Criar uma REST API usando NodeJS com as melhores práticas de desenvolvimento.
  • Integrar a API com o banco de dados criado para persistir os dados
  • Recomendável usar Drivers oficiais para integração com o DB
  • Desenvolver Testes Unitários

Modelo de Dados:

Para a definição do modelo, consultar o arquivo products.json que foi exportado do Open Food Facts, um detalhe importante é que temos dois campos personalizados para poder fazer o controle interno do sistema e que deverão ser aplicados em todos os alimentos no momento da importação, os campos são:

  • imported_t: campo do tipo Date com a dia e hora que foi importado;
  • status: campo do tipo Enum com os possíveis valores draft, trash e published;

Sistema do CRON

Para prosseguir com o desafio, precisaremos criar na API um sistema de atualização que vai importar os dados para a Base de Dados com a versão mais recente do Open Food Facts uma vez ao día. Adicionar aos arquivos de configuração o melhor horário para executar a importação.

A lista de arquivos do Open Food, pode ser encontrada em:

Onde cada linha representa um arquivo que está disponível em https://challenges.coode.sh/food/data/json/{filename}.

É recomendável utilizar uma Collection secundária para controlar os históricos das importações e facilitar a validação durante a execução.

Ter em conta que:

  • Todos os produtos deverão ter os campos personalizados imported_t e status.
  • Limitar a importação a somente 100 produtos de cada arquivo.

A REST API

Na REST API teremos um CRUD com os seguintes endpoints:

  • GET /: Detalhes da API, se conexão leitura e escritura com a base de dados está OK, horário da última vez que o CRON foi executado, tempo online e uso de memória.
  • PUT /products/:code: Será responsável por receber atualizações do Projeto Web
  • DELETE /products/:code: Mudar o status do produto para trash
  • GET /products/:code: Obter a informação somente de um produto da base de dados
  • GET /products: Listar todos os produtos da base de dados, adicionar sistema de paginação para não sobrecarregar o REQUEST.

Extras

  • Diferencial 1 Front End con ReactJs, configurar um projeto web para listar os produtos cadastrados na REST API.
  • Diferencial 2 Configurar Docker no Projeto para facilitar o Deploy da equipe de DevOps;
  • Diferencial 3 Configurar um sistema de alerta se tem algum falho durante o Sync dos produtos;
  • Diferencial 4 Descrever a documentação da API utilizando o conceito de Open API 3.0;
  • Diferencial 5 Escrever Unit Tests para os endpoints GET e PUT do CRUD;

Readme do Repositório

  • Deve conter o título de cada projeto
  • Uma descrição de uma frase
  • Como instalar e usar o projeto (instruções)
  • Não esqueça o .gitignore

Finalização

Avisar sobre a finalização e enviar para correção em: https://coodesh.com/review-challenge Após essa etapa será marcado a apresentação/correção do projeto.

Instruções para a Apresentação:

  1. Será necessário compartilhar a tela durante a vídeo chamada;
  2. Deixe todos os projetos de solução previamente abertos em seu computador antes de iniciar a chamada;
  3. Deixe os ambientes configurados e prontos para rodar;
  4. Prepara-se pois você será questionado sobre cada etapa e decisão do Challenge;
  5. Prepare uma lista de perguntas, dúvidas, sugestões de melhorias e feedbacks (caso tenha).

Suporte

Use a nossa comunidade para tirar dúvidas sobre o processo ou envie um e-mail para [email protected].