{"id":19207476,"url":"https://github.com/valchanoficial/api-mvcemongodb","last_synced_at":"2026-04-13T01:03:22.227Z","repository":{"id":105400991,"uuid":"179594763","full_name":"ValchanOficial/API-MVCeMongoDB","owner":"ValchanOficial","description":"Code:Nation - Desafio: API de uma plataforma de receitas utilizando Spring MVC e MongoDB","archived":false,"fork":false,"pushed_at":"2019-04-05T02:46:52.000Z","size":116,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-23T06:44:39.169Z","etag":null,"topics":["gradle","java","java8","mongodb","mvc","spring-mvc","springframework"],"latest_commit_sha":null,"homepage":null,"language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ValchanOficial.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-05T00:04:08.000Z","updated_at":"2020-07-10T08:03:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"c0cc7d8d-70e1-4ede-a8de-dba25f614d13","html_url":"https://github.com/ValchanOficial/API-MVCeMongoDB","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ValchanOficial/API-MVCeMongoDB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValchanOficial%2FAPI-MVCeMongoDB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValchanOficial%2FAPI-MVCeMongoDB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValchanOficial%2FAPI-MVCeMongoDB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValchanOficial%2FAPI-MVCeMongoDB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ValchanOficial","download_url":"https://codeload.github.com/ValchanOficial/API-MVCeMongoDB/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ValchanOficial%2FAPI-MVCeMongoDB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273423864,"owners_count":25103145,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-03T02:00:09.631Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["gradle","java","java8","mongodb","mvc","spring-mvc","springframework"],"created_at":"2024-11-09T13:20:13.261Z","updated_at":"2026-04-13T01:03:22.172Z","avatar_url":"https://github.com/ValchanOficial.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API de uma plataforma de receitas\n\nNeste desafio você criará uma API para uma plataforma de receitas.\n\n## Tópicos\n\nNeste desafio você aprenderá:\n\n* Java\n* Spring MVC\n* MongoDB\n\n## Requisitos\n\nPara este desafio você precisará de:\n\n- Java 8 (ou superior)\n- Git\n- MongoDB 4.0 (ou superior)\n\n## MongoDB\n\nInstalar o MongoDB e rodar na porta padrão `27017`\n\nhttps://docs.mongodb.com/manual/installation\n\n## Detalhes\n\nA receita deve ser salva na collection `recipe` e seguir o seguinte esquema:\n\n```json\n{\n  \"_id\": \"5bc698399531146718e31220\",\n  \"title\": \"Bolo de chocolate\",\n  \"description\": \"Bolo de chocolate caseiro\",\n  \"likes\": [\n    \"123\",\n    \"456\"\n  ],\n  \"ingredients\": [\n    \"ovo\",\n    \"chocolate\"\n  ],\n  \"comments\": [\n    {\n      \"_id\": \"5bc6a737953114503ce9cd7f\",\n      \"comment\": \"Muito gostoso!\"\n    }\n  ]\n}\n```\n\n---\n\nA API deve responder pelas seguintes URLs:\n\n## POST /recipe\n\nAdiciona uma nova receita.\n* Deve retornar o objeto adicionado com o `id` gerado.\n\n##### Request body\n```json\n{\n  \"title\": \"Bolo de chocolate\",\n  \"description\": \"Bolo de chocolate caseiro\",\n  \"ingredients\": [\n    \"ovo\",\n    \"chocolate\"\n  ]\n}\n```\n\n##### Response body\n```json\n{\n  \"id\": \"5bc698399531146718e31220\",\n  \"title\": \"Bolo de chocolate\",\n  \"description\": \"Bolo de chocolate caseiro\",\n  \"ingredients\": [\n    \"ovo\",\n    \"chocolate\"\n  ]\n}\n```\n\n## PUT /recipe/{id}\n\nAtualiza uma receita.\n* Somente os campos `title`, `description` e `ingredients` devem ser atualizados.\n* Os demais campos devem continuar iguais.\n\n##### Request body:\n```json\n{\n  \"title\": \"Bolo de chocolate\",\n  \"description\": \"Bolo de chocolate caseiro\",\n  \"ingredients\": [\n    \"ovo\",\n    \"chocolate\"\n  ]\n}\n```\n\n## DELETE /recipe/{id}\n\nRemove uma receita.\n\n## GET /recipe/{id}\n\nRetorna uma receita.\n\n##### Response body\n```json\n{\n  \"id\": \"5bc698399531146718e31220\",\n  \"title\": \"Bolo de chocolate\",\n  \"description\": \"Bolo de chocolate caseiro\",\n  \"likes\": [\n    \"123\",\n    \"456\"\n  ],\n  \"ingredients\": [\n    \"ovo\",\n    \"chocolate\"\n  ],\n  \"comments\": [\n    {\n      \"id\": \"5bc6a737953114503ce9cd7f\",\n      \"comment\": \"Muito gostoso!\"\n    }\n  ]\n}\n```\n\n## GET /recipe/ingredient\n\nLista as receitas que possuem determinado ingrediente.\n* Ordenar pelo campo `title` em ordem alfabética ascendente.\n* Ex: /recipe/ingredient?ingredient=ovo\n\n##### Request param\n* `ingredient` \n\n##### Response body\n```json\n[\n  {\n    \"id\": \"5bc698399531146718e31220\",\n    \"title\": \"Bolo de chocolate\",\n    \"description\": \"Bolo de chocolate caseiro\",\n    \"likes\": [\n      \"123\",\n      \"456\"\n    ],\n    \"ingredients\": [\n      \"ovo\",\n      \"chocolate\"\n    ],\n    \"comments\": [\n      {\n        \"id\": \"5bc6a737953114503ce9cd7f\",\n        \"comment\": \"Muito gostoso!\"\n      }\n    ]\n  },\n  {\n    \"id\": \"5bc932af9531144888cc2bd2\",\n    \"title\": \"Sopa de legumes\",\n    \"description\": \"Sopa de legumas com ovo e lentilha \",\n    \"ingredients\": [\n      \"cenoura\",\n      \"cebola\",\n      \"ovo\"\n    ]\n  }\n]\n```\n\n## GET /recipe/search\n\nPesquisa de receitas.\n* Deve pesquisar nos campos `title` e `description`\n* Deve pesquisar em qualquer lugar do texto\n* Deve pesquisar usando `case-insensitive`\n* Ordenar pelo campo `title` em ordem alfabética ascendente.\n* Ex: /recipe/search?search=choco\n\n##### Request param\n* `search` \n\n##### Response body\n```json\n[\n  {\n    \"id\": \"5bc698399531146718e31220\",\n    \"title\": \"Bolo de chocolate\",\n    \"description\": \"Bolo de chocolate caseiro\",\n    \"likes\": [\n      \"123\",\n      \"456\"\n    ],\n    \"ingredients\": [\n      \"ovo\",\n      \"chocolate\"\n    ],\n    \"comments\": [\n      {\n        \"id\": \"5bc6a737953114503ce9cd7f\",\n        \"comment\": \"Muito gostoso!\"\n      }\n    ]\n  },\n  {\n    \"id\": \"5bc932949531144888cc2bd1\",\n    \"title\": \"Torta de chocolate\",\n    \"description\": \"Torta de chocolate com morango\",\n    \"ingredients\": [\n      \"chocolate\",\n      \"morango\"\n    ]\n  }\n]\n```\n\n## POST /recipe/{id}/like/{userId}\n\nCurtir uma receita.\n* Deve ser enviado um `userId` arbitrário para dizer qual usuário está curtindo a receita.\n\t* *Obs: Em uma aplicação real, o `userId` seria pego do usuário autenticado.*\n* O `userId` deve ser inserido na última posição do array do campo `likes`\n\n## DELETE /recipe/{id}/like/{userId}\n\n\"Descurtir\" uma receita.\n* Deve ser enviado um `userId` arbitrário para dizer qual usuário está \"descurtindo\" a receita.\n\t* *Obs: Em uma aplicação real, o `userId` seria pego do usuário autenticado.*\n\n## POST /recipe/{id}/comment\n\nAdiciona um comentário em uma receita.\n* Gerar um `ObjectId` antes de salvar\n* Deve retornar o objeto adicionado com o `id` gerado.\n* O comentário deve ser inserido na última posição do array do campo `comments`\n\n##### Request body\n```json\n{\n  \"comment\": \"Muito gostoso!\"\n}\n```\n\n##### Response body\n```json\n{\n  \"id\": \"5bcbef8b9531144334eaec8e\",\n  \"comment\": \"Muito gostoso!\"\n}\n```\n\n## PUT /recipe/{id}/comment/{commentId}\n\nAtualiza um comentário de uma receita.\n\n##### Request body\n```json\n{\n  \"comment\": \"Muito gostoso!\"\n}\n```\n\n## DELETE /recipe/{id}/comment/{commentId}\n\nRemove um comentário de uma receita.\n\n---\n\n#### Rodando a aplicação\n\nExecutar o comando `gradlew bootRun`\n\nA aplicação estará disponível em `http://localhost:8080`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalchanoficial%2Fapi-mvcemongodb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvalchanoficial%2Fapi-mvcemongodb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvalchanoficial%2Fapi-mvcemongodb/lists"}