RocketSeat - Ignite/Elixir
Nesse desafio, você deverá criar uma aplicação para monitoramento de consumo de alimentos durante o dia.
O schema de uma refeição deverá possuir os seguintes campos:
# Meal
{
id: id,
descricao: descricao,
data: data,
calorias: calorias
}
Obs: O Id deve ser gerado automaticamente, pode ser um inteiro ou um UUID, mas não pode se repetir.
- Para criar um campo com uma data no Ecto, em seu schema, você deverá utilizar o tipo
:datetime
; - O campo
descricao
irá possuir informações sobre o que foi consumido no momento (tipo de dado: string); - O campo
data
deverá armazenar a data e hora em que o alimento foi consumido; - O campo
calorias
irá possuir informações sobre a quantidade de calorias do alimento consumido; - Os dados deverão ser salvos em uma tabela chamada
meals
.
A aplicação deverá possuir rotas para satisfazer os requisitos de um CRUD normal:
- Deve ser possível cadastrar uma refeição feita, retornando um status
201
e a informação criada; - Deve ser possível atualizar uma refeição já cadastrada, retornando um status
200
e a refeição atualizada; - Deve ser possível exibir uma refeição existente, retornando um status
200
e a refeição buscada; - Deve ser possível excluir uma refeição cadastrada, retornando um status
200
ou204
.
Nesse desafio, você deverá criar testes para a aplicação que foi desenvolvida ao longo desse módulo. Caso você já tenha desenvolvido os testes como forma de complementar a aplicação, basta submeter o link do mesmo repositório para esse desafio.
É importante que os testes tenham uma cobertura de 100%
Nesse desafio, você deverá implementar uma nova feature na aplicação feita no desafio 01 do capítulo anterior.
Agora a aplicação deve possuir uma tabela users
e esses usuários devem possuir uma relação one-to-many com a tabela meals
(já feita no primeiro desafio do capítulo) onde cada usuário tem a sua própria lista de refeições diárias.
O schema de um usuário deverá possuir os seguintes campos:
# User
{
id: id,
nome: nome,
cpf: cpf,
email: email
}
Obs: O Id deve ser gerado automaticamente, pode ser um inteiro ou um UUID, mas não pode se repetir.
Você pode resetar o banco de dados usando o comando mix ecto.reset
. Assim, os dados registrados durante o desenvolvimento da aplicação para o desafio 01 CRUD - Refeições diárias serão apagados e você não terá problemas ao adicionar o relacionamento com a nova tabela.