{"id":19871528,"url":"https://github.com/mar-alv/ignite-todo-list-api","last_synced_at":"2025-03-01T00:48:27.480Z","repository":{"id":246833883,"uuid":"822304475","full_name":"mar-alv/ignite-todo-list-api","owner":"mar-alv","description":"1st NodeJs challenge of Ignite, Rocketseat's programming course, an API to handle a To Do List, where you can list, filter, create, update and delete To Dos ","archived":false,"fork":false,"pushed_at":"2024-12-14T16:08:32.000Z","size":346,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-11T16:36:06.888Z","etag":null,"topics":["api","back-end","backend","httpie","javascript","js","node","nodejs","stream","streaming"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/mar-alv.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":"2024-06-30T21:33:47.000Z","updated_at":"2024-12-14T16:08:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"910b2bc0-4eb9-4dd7-87ed-868205e870f8","html_url":"https://github.com/mar-alv/ignite-todo-list-api","commit_stats":null,"previous_names":["mar-alv/ignite-todo-list-api"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mar-alv%2Fignite-todo-list-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mar-alv%2Fignite-todo-list-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mar-alv%2Fignite-todo-list-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mar-alv%2Fignite-todo-list-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mar-alv","download_url":"https://codeload.github.com/mar-alv/ignite-todo-list-api/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241295474,"owners_count":19939830,"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":["api","back-end","backend","httpie","javascript","js","node","nodejs","stream","streaming"],"created_at":"2024-11-12T16:12:38.948Z","updated_at":"2025-03-01T00:48:27.440Z","avatar_url":"https://github.com/mar-alv.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align='center'\u003e Ignite ToDo List API \u003c/h1\u003e\n\n\u003cdiv align='center'\u003e\n\n  ![project-img](./.github/cover.jpg)\n  \n  [![License: MIT](https://img.shields.io/badge/License-MIT-brightgreen.svg)](https://opensource.org/licenses/MIT)\n\n  [🇧🇷 Português](./docs/README-pt.md)\n\n\u003c/div\u003e\n\n## 📚 Summary\n- [❕ About](#about)\n- [📖 Instructions](#instructions)\n  - [📥 Install](#install)\n  - [🚀 Run Locally](#locally)\n- [⚡ Endpoints](#endpoints)\n- [📂 Structure](#structure)\n- [🧰 Technologies](#technologies)\n- [📸 Screenshots and 🎥 Recordings](#screenshots-prints)\n- [👤 Author](#author)\n- [📄 License](#license)\n\n### \u003ca id='about' style='text-decoration: none; color: inherit;'\u003e❕ About\u003c/a\u003e\nThis is my implementation of the challenge project \"ToDo List API\" from the first Node.js module of [Ignite](https://www.rocketseat.com.br/ignite), an intermediate and advanced course in various programming languages and technologies offered by [Rocketseat](https://www.rocketseat.com.br/).\n\n### \u003ca id='instructions' style='text-decoration: none; color: inherit;'\u003e📖 Instructions\u003c/a\u003e\n#### \u003ca id='instalar' style='text-decoration: none; color: inherit;'\u003e📥 Install\u003c/a\u003e\nPaste the 1º command into a terminal open within a folder of your preference to clone the project\n```sh\ngit clone https://github.com/mar-alv/ignite-todo-list-api.git\n```\n\nThen run one of the versions of the 2º command to install the dependencies\n```sh\nnpm i\n```\n```sh\nnpm install\n```\n\n#### \u003ca id='locally' style='text-decoration: none; color: inherit;'\u003e🚀 Run Locally\u003c/a\u003e\nPaste the command into a terminal, the server will be accessable through the port 3001\n```sh\nnpm run dev\n```\n\n### \u003ca id='endpoints' style='text-decoration: none; color: inherit;'\u003e⚡ Endpoints\u003c/a\u003e\nIn order to make requests to the server with 🥧 HTTPie directly from the terminal, you would have to follow its CLI [installation guide](https://httpie.io/docs/cli/main-features)\n#### Create a task\nCreates a new task with the given title and description\n```sh\ncurl -X POST http://localhost:3001/tasks -h \"Content-Type: application/json\" -d '{\"title\":\"Task title\", \"description\":\"Task description\"}'\n```\n\nWith 🥧 HTTPie\n```sh\nhttp POST http://localhost:3001/tasks \u003c httpie/create.json\n```\nResponses\n```\n# When successfully creating a new task\n\nHTTP/1.1 201 Created\nConnection: keep-alive\nContent-type: application/json\n\n\"Task created\"\n\n# When not providing a valid request body\n\nHTTP/1.1 400 Bad Request\nContent-type: application/json\n\n\"Title and description are obligatory\"\n```\n\n#### List tasks\nLists all tasks created, you may optionally pass a value to filter for specific tasks, based on their title or description\n```sh\ncurl -X GET 'http://localhost:3001/tasks' -h \"Content-Type: application/json\"\n```\n```sh\ncurl -X GET 'http://localhost:3001/tasks?search=title' -h \"Content-Type: application/json\"\n```\n\nWith 🥧 HTTPie\n```sh\nhttp GET http://localhost:3001/tasks\n```\n```sh\nhttp GET http://localhost:3001/tasks?search=title\n```\nResponses\n```\n# Having created a task\nHTTP/1.1 200 OK\nConnection: keep-alive\nContent-type: application/json\n\n[\n  {\n   \"completedAt\": null,\n   \"createdAt\": \"2024-06-30T22:47:22.258Z\",\n   \"description\": \"task description\",\n   \"id\": \"88e75cc5-605f-49e9-a295-89a027136ab0\",\n    \"title\": \"task title\",\n    \"updatedAt\": \"2024-06-30T22:47:22.258Z\"\n  }\n]\n\n# Not having created a task or none matching the given filter\n\nHTTP/1.1 200 OK\nConnection: keep-alive\nContent-type: application/json\n\n[]\n```\n\n#### Update a task\nUpdates the title and/or description of an existing task through its id, the updatedAt date is automatically updated\n```sh\ncurl -X PUT http://localhost:3001/tasks/e13c1414-476f-4c7d-b8ca-44a4279bd538 -h \"Content-Type: application/json\" -d '{\"title\":\"New task title\", \"description\":\"New task description\"}'\n```\n\nWith 🥧 HTTPie\n```sh\nhttp PUT http://localhost:3001/tasks/e13c1414-476f-4c7d-b8ca-44a4279bd538 \u003c httpie/update.json\n```\n\nResponses\n```\n# When successfully updating a task\n\nHTTP/1.1 204 No Content\nConnection: keep-alive\nContent-type: application/json\n\n# When not providing a valid request body\n\nHTTP/1.1 400 Bad Request\nConnection: keep-alive\nContent-type: application/json\n\n\"Title or description obligatory\"\n\n# When not finding the task by its id\n\nHTTP/1.1 404 Not Found\nConnection: keep-alive\nContent-type: application/json\n\n\"Task not found\"\n```\n\n#### Delete a task\nDeletes an existing task through its id\n```sh\ncurl -X DELETE http://localhost:3001/tasks/e13c1414-476f-4c7d-b8ca-44a4279bd538 -h \"Content-Type: application/json\"\n```\n\nWith 🥧 HTTPie\n```sh\nhttp DELETE http://localhost:3001/tasks/e13c1414-476f-4c7d-b8ca-44a4279bd538\n```\n\nResponses\n```\n# When successfully deleting a task\n\nHTTP/1.1 204 No Content\nConnection: keep-alive\nContent-type: application/json\n\n# When not finding the task by its id\n\nHTTP/1.1 404 Not Found\nConnection: keep-alive\nContent-type: application/json\n\n\"Task not found\"\n```\n\n#### Close/Reopen a task\nCloses or reopens an existing task through its id\n```sh\ncurl -X PATCH http://localhost:3001/tasks/e13c1414-476f-4c7d-b8ca-44a4279bd538/complete -h \"Content-Type: application/json\"\n```\n\nWith 🥧 HTTPie\n```sh\nhttp PATCH http://localhost:3001/tasks/e13c1414-476f-4c7d-b8ca-44a4279bd538/complete\n```\n\nResponses\n```\n# When successfully closing/reopening a task\n\nHTTP/1.1 204 No Content\nConnection: keep-alive\nContent-type: application/json\n\n# When not finding the task by its id\n\nHTTP/1.1 404 Not Found\nConnection: keep-alive\nContent-type: application/json\n\n\"Task not found\"\n```\n\n#### Non existing route\nWhen trying to access a route that doesn't exists in the server\n\nResponse\n```\nHTTP/1.1 404 Not Found\nConnection: keep-alive\nContent-type: application/json\n\n\"Route not found\"\n```\n\n### \u003ca id='structure' style='text-decoration: none; color: inherit;'\u003e📂 Structure\u003c/a\u003e\n```\n│ docs/\n│   └── ...\n│ httpie/\n│   └── ...\n│ src/\n│   ├── middlewares/\n│   │     └── ...\n│   ├── utils/\n│   │     └── ...\n│   └── ...\n```\n\n### \u003ca id='technologies' style='text-decoration: none; color: inherit;'\u003e🧰 Technologies\u003c/a\u003e\n#### Build Tools\n[![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white)](https://nodejs.org/)\n\n#### Testing\n[![HTTPie](https://img.shields.io/badge/HTTPie-000?style=for-the-badge\u0026logo=httpie\u0026logoColor=white)](https://httpie.io/)\n\n### \u003ca id='author' style='text-decoration: none; color: inherit;'\u003e👤 Author\u003c/a\u003e\n\u003cdiv style='display: flex; align-items: center;'\u003e\n\t\t\u003cimg src='https://github.com/mar-alv.png' alt='Marcelo Alvarez GitHub profile picture' style='width: 150px; border-radius: 50%; margin-right: 20px;'\u003e\n\t\t\u003cdiv\u003e\n\t\t\t\t\u003cstrong\u003eMarcelo Alvarez\u003c/strong\u003e\n\t\t\t\t\u003cbr\u003e\n\t\t\t\t\u003cem\u003eFront-end Developer\u003c/em\u003e\u003cbr\u003e\n\t\t\t\t\u003cspan\u003e\"Some AI generated funny quote here 😗\"\u003c/span\u003e\u003cbr\u003e\n\t\t\t\t\u003ca href='https://www.linkedin.com/in/mar-alv'\u003e\n\t\t\t\t\t\u003cimg\n\t\t\t\t\t\talt='LinkedIn'\n\t\t\t\t\t\tsrc='https://img.shields.io/badge/LinkedIn-Marcelo%20Alvarez-0077B5?logo=linkedin\u0026logoColor=white'\n\t\t\t\t\t/\u003e\n\t\t\t\t\u003c/a\u003e\n\t\t\t\t\u003ca href='https://mar-alv.github.io/'\u003e\n\t\t\t\t\t\u003cimg\n\t\t\t\t\t\talt='Portfolio'\n\t\t\t\t\t\tsrc='https://img.shields.io/badge/Portfolio-Marcelo%20Alvarez-000?style=flat\u0026logo=portfolio\u0026logoColor=white'\n\t\t\t\t\t/\u003e\n\t\t\t\t\u003c/a\u003e\n\t\t\u003c/div\u003e\n\u003c/div\u003e\n\n### \u003ca id='license' style='text-decoration: none; color: inherit;'\u003e📄 License\u003c/a\u003e\nLicensed under [MIT](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmar-alv%2Fignite-todo-list-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmar-alv%2Fignite-todo-list-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmar-alv%2Fignite-todo-list-api/lists"}