{"id":21174450,"url":"https://github.com/vinicamposdev/gostack-conceitos-nodejs","last_synced_at":"2025-03-14T18:19:16.258Z","repository":{"id":42695693,"uuid":"306929317","full_name":"vinicamposdev/gostack-conceitos-nodejs","owner":"vinicamposdev","description":null,"archived":false,"fork":false,"pushed_at":"2023-01-24T04:24:24.000Z","size":1314,"stargazers_count":1,"open_issues_count":16,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-21T11:21:55.306Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vinicamposdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-24T16:52:44.000Z","updated_at":"2023-03-09T00:08:10.000Z","dependencies_parsed_at":"2023-02-05T00:16:32.882Z","dependency_job_id":null,"html_url":"https://github.com/vinicamposdev/gostack-conceitos-nodejs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":"rocketseat-education/gostack-template-conceitos-nodejs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinicamposdev%2Fgostack-conceitos-nodejs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinicamposdev%2Fgostack-conceitos-nodejs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinicamposdev%2Fgostack-conceitos-nodejs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vinicamposdev%2Fgostack-conceitos-nodejs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vinicamposdev","download_url":"https://codeload.github.com/vinicamposdev/gostack-conceitos-nodejs/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243624103,"owners_count":20321029,"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","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":[],"created_at":"2024-11-20T16:54:39.995Z","updated_at":"2025-03-14T18:19:16.235Z","avatar_url":"https://github.com/vinicamposdev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch3\u003e  Rocketseat: Bootcamp Gostack\u003c/h1\u003e\n\u003ch1 align=\"center\"\u003eDesafio 02: Conceitos do Node.js\u003c/a\u003e\n\n## :rocket: Sobre o desafio\n\nNesse desafio, você deve criar uma aplicação para treinar o que você aprendeu até agora no Node.js!\n\nEssa será uma aplicação para armazenar repositórios do seu portfólio, que irá permitir a criação, listagem, atualização e remoção dos repositórios, e além disso permitir que os repositórios possam receber \"likes\".\n\n### Rotas da aplicação\n\nAgora que você já está com o template clonado, e pronto para continuar, você deve abrir o arquivo app.js, e completar onde não possui código com o código para atingir os objetivos de cada rota.\n\n- [ ] **`POST /repositories`**: A rota deve receber `title`, `url` e `techs` dentro do corpo da requisição, sendo a URL o link para o github desse repositório. Ao cadastrar um novo projeto, ele deve ser armazenado dentro de um objeto no seguinte formato: `{ id: \"uuid\", title: 'Desafio Node.js', url: 'http://github.com/...', techs: [\"Node.js\", \"...\"], likes: 0 }`; Certifique-se que o ID seja um UUID, e de sempre iniciar os likes como 0.\n\n- [ ] **`GET /repositories`**: Rota que lista todos os repositórios;\n\n- [ ] **`PUT /repositories/:id`**: A rota deve alterar apenas o `title`, a `url` e as `techs` do repositório que possua o `id` igual ao `id` presente nos parâmetros da rota;\n\n- [ ] **`DELETE /repositories/:id`**: A rota deve deletar o repositório com o `id` presente nos parâmetros da rota;\n\n- [ ] **`POST /repositories/:id/like`**: A rota deve aumentar o número de likes do repositório específico escolhido através do `id` presente nos parâmetros da rota, a cada chamada dessa rota, o número de likes deve ser aumentado em 1;\n\n### Específicação dos testes\n\nEm cada teste, tem uma breve descrição no que sua aplicação deve cumprir para que o teste passe.\n\nCaso você tenha dúvidas quanto ao que são os testes, e como interpretá-los, dé uma olhada em **[nosso FAQ](https://github.com/Rocketseat/bootcamp-gostack-desafios/tree/master/faq-desafios).**\n\nPara esse desafio temos os seguintes testes:\n\n- [ ] **`should be able to create a new repository`**: Para que esse teste passe, sua aplicação deve permitir que um repositório seja criado, e retorne um json com o projeto criado.\n\n- [ ] **`should be able to list the repositories`**: Para que esse teste passe, sua aplicação deve permitir que seja retornado um array com todos os repositórios que foram criados até o momento.\n\n- [ ] **`should be able to update repository`**: Para que esse teste passe, sua aplicação deve permitir que sejam alterados apenas os campos `url`, `title` e `techs`.\n\n- [ ] **`should not be able to update a repository that does not exist`**: Para que esse teste passe, você deve validar na sua rota de update se o id do repositório enviado pela url existe ou não. Caso não exista, retornar um erro com status `400`.\n\n- [ ] **`should not be able to update repository likes manually`**: Para que esse teste passe, você não deve permitir que sua rota de update altere diretamente os likes desse repositório, mantendo o mesmo número de likes que o repositório já possuia antes da atualização. Isso porque o único lugar que deve atualizar essa informação é a rota responsável por aumentar o número de likes.\n\n- [ ] **`should be able to delete the repository`**: Para que esse teste passe, você deve permitir que a sua rota de delete exclua um projeto, e ao fazer a exclusão, ele retorne uma resposta vazia, com status `204`.\n\n- [ ] **`should not be able to delete a repository that does not exist`**: Para que esse teste passe, você deve validar na sua rota de delete se o id do repositório enviado pela url existe ou não. Caso não exista, retornar um erro com status `400`.\n\n- [ ] **`should be able to give a like to the repository`**: Para que esse teste passe, sua aplicação deve permitir que um repositório com o id informado possa receber likes. O valor de likes deve ser incrementado em 1 a cada requisição, e como resultado, retornar um json contendo o repositório com o número de likes atualizado.\n\n- [ ] **`should not be able to like a repository that does not exist`**: Para que esse teste passe, você deve validar na sua rota de like se o id do repositório enviado pela url existe ou não. Caso não exista, retornar um erro com status `400`.\n\n## :memo: Licença\n\nEsse projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinicamposdev%2Fgostack-conceitos-nodejs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvinicamposdev%2Fgostack-conceitos-nodejs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvinicamposdev%2Fgostack-conceitos-nodejs/lists"}