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.
- 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.
- 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
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;
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:
- https://challenges.coode.sh/food/data/json/index.txt
- https://challenges.coode.sh/food/data/json/data-fields.txt
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
estatus
. - Limitar a importação a somente 100 produtos de cada arquivo.
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 WebDELETE /products/:code
: Mudar o status do produto paratrash
GET /products/:code
: Obter a informação somente de um produto da base de dadosGET /products
: Listar todos os produtos da base de dados, adicionar sistema de paginação para não sobrecarregar oREQUEST
.
- 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
- 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
- Adicione o link do repositório com a sua solução no teste
- Adicione o link da apresentação do seu projeto no README.md.
- Verifique se o Readme está bom e faça o commit final em seu repositório;
- Envie e aguarde as instruções para seguir. Sucesso e boa sorte. =)
Use a nossa comunidade para tirar dúvidas sobre o processo ou envie uma mensagem diretamente a um especialista no chat da plataforma.