Neste desafio você criará uma API para uma plataforma de receitas.
Neste desafio você aprenderá:
- Java
- Spring MVC
- MongoDB
Para este desafio você precisará de:
- Java 8 (ou superior)
- Git
- MongoDB 4.0 (ou superior)
Instalar o MongoDB e rodar na porta padrão 27017
https://docs.mongodb.com/manual/installation
A receita deve ser salva na collection recipe e seguir o seguinte esquema:
{
"_id": "5bc698399531146718e31220",
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"likes": [
"123",
"456"
],
"ingredients": [
"ovo",
"chocolate"
],
"comments": [
{
"_id": "5bc6a737953114503ce9cd7f",
"comment": "Muito gostoso!"
}
]
}A API deve responder pelas seguintes URLs:
Adiciona uma nova receita.
- Deve retornar o objeto adicionado com o
idgerado.
{
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"ingredients": [
"ovo",
"chocolate"
]
}{
"id": "5bc698399531146718e31220",
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"ingredients": [
"ovo",
"chocolate"
]
}Atualiza uma receita.
- Somente os campos
title,descriptioneingredientsdevem ser atualizados. - Os demais campos devem continuar iguais.
{
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"ingredients": [
"ovo",
"chocolate"
]
}Remove uma receita.
Retorna uma receita.
{
"id": "5bc698399531146718e31220",
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"likes": [
"123",
"456"
],
"ingredients": [
"ovo",
"chocolate"
],
"comments": [
{
"id": "5bc6a737953114503ce9cd7f",
"comment": "Muito gostoso!"
}
]
}Lista as receitas que possuem determinado ingrediente.
- Ordenar pelo campo
titleem ordem alfabética ascendente. - Ex: /recipe/ingredient?ingredient=ovo
ingredient
[
{
"id": "5bc698399531146718e31220",
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"likes": [
"123",
"456"
],
"ingredients": [
"ovo",
"chocolate"
],
"comments": [
{
"id": "5bc6a737953114503ce9cd7f",
"comment": "Muito gostoso!"
}
]
},
{
"id": "5bc932af9531144888cc2bd2",
"title": "Sopa de legumes",
"description": "Sopa de legumas com ovo e lentilha ",
"ingredients": [
"cenoura",
"cebola",
"ovo"
]
}
]Pesquisa de receitas.
- Deve pesquisar nos campos
titleedescription - Deve pesquisar em qualquer lugar do texto
- Deve pesquisar usando
case-insensitive - Ordenar pelo campo
titleem ordem alfabética ascendente. - Ex: /recipe/search?search=choco
search
[
{
"id": "5bc698399531146718e31220",
"title": "Bolo de chocolate",
"description": "Bolo de chocolate caseiro",
"likes": [
"123",
"456"
],
"ingredients": [
"ovo",
"chocolate"
],
"comments": [
{
"id": "5bc6a737953114503ce9cd7f",
"comment": "Muito gostoso!"
}
]
},
{
"id": "5bc932949531144888cc2bd1",
"title": "Torta de chocolate",
"description": "Torta de chocolate com morango",
"ingredients": [
"chocolate",
"morango"
]
}
]Curtir uma receita.
- Deve ser enviado um
userIdarbitrário para dizer qual usuário está curtindo a receita.- Obs: Em uma aplicação real, o
userIdseria pego do usuário autenticado.
- Obs: Em uma aplicação real, o
- O
userIddeve ser inserido na última posição do array do campolikes
"Descurtir" uma receita.
- Deve ser enviado um
userIdarbitrário para dizer qual usuário está "descurtindo" a receita.- Obs: Em uma aplicação real, o
userIdseria pego do usuário autenticado.
- Obs: Em uma aplicação real, o
Adiciona um comentário em uma receita.
- Gerar um
ObjectIdantes de salvar - Deve retornar o objeto adicionado com o
idgerado. - O comentário deve ser inserido na última posição do array do campo
comments
{
"comment": "Muito gostoso!"
}{
"id": "5bcbef8b9531144334eaec8e",
"comment": "Muito gostoso!"
}Atualiza um comentário de uma receita.
{
"comment": "Muito gostoso!"
}Remove um comentário de uma receita.
Executar o comando gradlew bootRun
A aplicação estará disponível em http://localhost:8080