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
id
gerado.
{
"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
,description
eingredients
devem 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
title
em 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
title
edescription
- Deve pesquisar em qualquer lugar do texto
- Deve pesquisar usando
case-insensitive
- Ordenar pelo campo
title
em 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
userId
arbitrário para dizer qual usuário está curtindo a receita.- Obs: Em uma aplicação real, o
userId
seria pego do usuário autenticado.
- Obs: Em uma aplicação real, o
- O
userId
deve ser inserido na última posição do array do campolikes
"Descurtir" uma receita.
- Deve ser enviado um
userId
arbitrário para dizer qual usuário está "descurtindo" a receita.- Obs: Em uma aplicação real, o
userId
seria pego do usuário autenticado.
- Obs: Em uma aplicação real, o
Adiciona um comentário em uma receita.
- Gerar um
ObjectId
antes de salvar - Deve retornar o objeto adicionado com o
id
gerado. - 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