Giter VIP home page Giter VIP logo

products-parser-20230105's Introduction

Backend Challenge 20230105

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

  • O projeto deve utilizar a Linguagem específica na avaliação. Por exempo: Python, R, Scala e entre outras;
  • Considere como deadline da avaliação a partir do início do teste. 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.

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 com as melhores práticas de desenvolvimento, Design Patterns, SOLID e DDD.
  • 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 Configuração de um endpoint de busca com Elastic Search ou similares;
  • 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;
  • Diferencial 6 Escrever um esquema de segurança utilizando API KEY nos endpoints. Ref: https://learning.postman.com/docs/sending-requests/authorization/#api-key

Readme do Repositório

  • Deve conter o título do projeto
  • Uma descrição sobre o projeto em frase
  • Deve conter uma lista com linguagem, framework e/ou tecnologias usadas
  • Como instalar e usar o projeto (instruções)
  • Não esqueça o .gitignore
  • Se está usando github pessoal, referencie que é um challenge by coodesh:

This is a challenge by Coodesh

Finalização e Instruções para a Apresentação

  1. Adicione o link do repositório com a sua solução no teste
  2. Adicione o link da apresentação do seu projeto no README.md.
  3. Verifique se o Readme está bom e faça o commit final em seu repositório;
  4. Envie e aguarde as instruções para seguir. Sucesso e boa sorte. =)

Suporte

Use a nossa comunidade para tirar dúvidas sobre o processo ou envie uma mensagem diretamente a um especialista no chat da plataforma.

products-parser-20230105's People

Contributors

glaydston avatar

Watchers

Gabriel Ferreira avatar Cristiano AP avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.