{"id":25519569,"url":"https://github.com/brenonsc/todos-api","last_synced_at":"2026-04-08T20:02:47.145Z","repository":{"id":277719441,"uuid":"933277324","full_name":"brenonsc/todos-api","owner":"brenonsc","description":"Repositório criado para armazenar API em Node.js, para uma To-Do List.","archived":false,"fork":false,"pushed_at":"2025-02-17T23:51:18.000Z","size":69,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-07T02:46:56.663Z","etag":null,"topics":["bcrypt","express-js","jwt-authentication","node-js","postgresql","sequelize-orm","swagger"],"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/brenonsc.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,"zenodo":null}},"created_at":"2025-02-15T15:23:12.000Z","updated_at":"2025-05-22T13:42:50.000Z","dependencies_parsed_at":"2025-06-07T20:34:02.936Z","dependency_job_id":"b36ac679-935c-4e1f-94d8-013a22f2c4d7","html_url":"https://github.com/brenonsc/todos-api","commit_stats":null,"previous_names":["brenonsc/todo-api","brenonsc/todos-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/brenonsc/todos-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brenonsc%2Ftodos-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brenonsc%2Ftodos-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brenonsc%2Ftodos-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brenonsc%2Ftodos-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brenonsc","download_url":"https://codeload.github.com/brenonsc/todos-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brenonsc%2Ftodos-api/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31571601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["bcrypt","express-js","jwt-authentication","node-js","postgresql","sequelize-orm","swagger"],"created_at":"2025-02-19T17:20:05.208Z","updated_at":"2026-04-08T20:02:47.132Z","avatar_url":"https://github.com/brenonsc.png","language":"JavaScript","readme":"# To-Dos API\u0026nbsp; :white_check_mark:\n\n![License](https://badgen.net/badge/License/MIT/purple?icon=)\n![Node.js](https://badgen.net/badge/Node.js/v22/green?icon=)\n![Docker](https://badgen.net/badge/icon/Available?icon=docker\u0026label)\n\nEsta é uma API RESTful para gerenciar tarefas de usuários. Permite que os usuários autentiquem, criem, atualizem, deletem e listem tarefas.\n\n\u003cbr\u003e\n\n## Tecnologias utilizadas\u0026nbsp; 🔨\n\n\u003cdiv\u003e\n    \u003cimg align='center' height='62' width='56' title='Node.js' alt='node' src=\"https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/nodejs/nodejs-original.svg\" /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n    \u003cimg align='center' height='70' width='70' title='Express' alt='express' src='https://img.icons8.com/office40/512/express-js.png' /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n    \u003cimg align='center' height='62' width='56' title='Sequelize' alt='sequelize' src=\"https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/sequelize/sequelize-original.svg\" /\u003e\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n    \u003cimg align='center' height='48' width='50' title='JsonWebToken' alt='jsonwebtoken' src='https://images.ctfassets.net/kbkgmx9upatd/6E4gdxqqmafg9Usjz9etTU/bc93ad8e3cea217c3de390239ff34c8c/jwt-hero.png' /\u003e \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;\n    \u003cimg align='center' height='50' width='50' title='PostgreSQL' alt='postgresql' src='https://cdn-icons-png.flaticon.com/512/5968/5968342.png' /\u003e \u0026nbsp;\n    \u003cimg align='center' height='62' width='72' title='Swagger' alt='swagger' src='https://github.com/bush1D3v/tsbank_api/assets/133554156/6739401f-d03b-47f8-b01f-88da2a9075d1' /\u003e\n    \u003cimg align='center' height='64' width='64' title='Docker' alt='docker' src=\"https://cdn.jsdelivr.net/gh/devicons/devicon@latest/icons/docker/docker-original.svg\" /\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n## Instalação\u0026nbsp; 🖥️\n\n1. **Clone o repositório:**\n\n   ```sh\n   git clone https://github.com/brenonsc/todos-api.git\n   cd todos-api\n   ```\n\n2. **Copie o arquivo `.env.example` para `.env` e mude as variáveis de ambiente caso sinta necessidade:**\n\n   ```sh\n   cp .env.example .env\n   ```\n\n3. **Certifique-se de que o Docker está instalado na sua máquina.**\u003cbr\u003e\n   Caso não tenha, faça o download em: [Docker Desktop](https://www.docker.com/products/docker-desktop/).\n\n4. **Execute a aplicação:**\n\n   ```sh\n   docker compose up --build\n   ```\n\n   \u003cbr\u003e\n\n## Documentação\u0026nbsp; :arrow_forward:\n\nA API está documentada em Swagger, e pode ser acessada em `http://localhost:3000/apidocs`.\n\n\u003cbr\u003e\n\n## Endpoints\u0026nbsp; :hash:\n\n### Auth\n\n- **POST /login**\n\n  - Resumo: Autenticar um usuário.\n\n  - Corpo da Solicitação:\n\n    ```json\n    {\n      \"email\": \"john@email.com\",\n      \"password\": \"p@ssw0rd\"\n    }\n    ```\n\n  - Respostas:\n\n    - 200: Usuário autenticado com sucesso.\n    - 400: Solicitação inválida.\n    - 401: Email ou senha inválidos.\n    - 500: Erro interno do servidor.\n\n- **POST /logout**\n\n  - Resumo: Deslogar um usuário.\n  - Respostas:\n    - 204: Usuário deslogado com sucesso.\n    - 401: Usuário não logado.\n    - 500: Erro interno do servidor.\n\n### Users\n\n- **POST /users**\n\n  - Resumo: Criar um novo usuário.\n\n  - Corpo da Solicitação:\n\n    ```json\n    {\n      \"name\": \"John Doe\",\n      \"email\": \"john@email.com\",\n      \"password\": \"p@ssw0rd\"\n    }\n    ```\n\n  - Respostas:\n\n    - 201: Usuário criado com sucesso.\n    - 400: Solicitação inválida.\n    - 500: Erro interno do servidor.\n\n- **GET /users/me**\n\n  - Resumo: Obter informações do usuário logado.\n  - Respostas:\n    - 200: Usuário obtido com sucesso.\n    - 404: Usuário não encontrado.\n    - 500: Erro interno do servidor.\n\n- **PUT /users/{id}**\n\n  - Resumo: Atualizar um usuário.\n\n  - Corpo da Solicitação:\n\n    ```json\n    {\n      \"name\": \"Jane Doe\",\n      \"email\": \"jane@email.com\",\n      \"password\": \"p@ssw0rd\"\n    }\n    ```\n\n  - Respostas:\n\n    - 200: Usuário atualizado com sucesso.\n    - 400: Solicitação inválida.\n    - 401: Usuário não logado.\n    - 403: Usuário não autorizado.\n    - 404: Usuário não encontrado.\n    - 500: Erro interno do servidor.\n\n- **DELETE /users/{id}**\n\n  - Resumo: Deletar um usuário.\n  - Respostas:\n    - 204: Usuário deletado com sucesso.\n    - 401: Usuário não logado.\n    - 403: Usuário não autorizado.\n    - 404: Usuário não encontrado.\n    - 500: Erro interno do servidor.\n\n### Todos\n\n- **GET /todos**\n\n  - Resumo: Listar todas as tarefas do usuário.\n  - Respostas:\n    - 200: Tarefas listadas com sucesso.\n    - 401: Usuário não logado.\n    - 500: Erro interno do servidor.\n\n- **POST /todos**\n\n  - Resumo: Criar uma nova tarefa.\n\n  - Corpo da Solicitação:\n\n    ```json\n    {\n      \"title\": \"Swagger\",\n      \"description\": \"Configurar Swagger na aplicação.\",\n      \"status\": \"Pendente\"\n    }\n    ```\n\n  - Respostas:\n\n    - 201: Tarefa criada com sucesso.\n    - 401: Usuário não logado.\n    - 500: Erro interno do servidor.\n\n- **GET /todos/{id}**\n\n  - Resumo: Obter uma tarefa específica do usuário.\n  - Respostas:\n    - 200: Tarefa obtida com sucesso.\n    - 401: Usuário não logado.\n    - 404: Tarefa não encontrada ou não pertence ao usuário.\n    - 500: Erro interno do servidor.\n\n- **PUT /todos/{id}**\n\n  - Resumo: Atualizar uma tarefa.\n\n  - Corpo da Solicitação:\n\n    ```json\n    {\n      \"title\": \"Swagger\",\n      \"description\": \"Configurar Swagger na aplicação.\",\n      \"status\": \"Concluído\"\n    }\n    ```\n\n  - Respostas:\n\n    - 200: Tarefa atualizada com sucesso.\n    - 401: Usuário não logado.\n    - 404: Tarefa não encontrada ou não pertence ao usuário.\n    - 500: Erro interno do servidor.\n\n- **DELETE /todos/{id}**\n\n  - Resumo: Deletar uma tarefa.\n  - Respostas:\n    - 204: Tarefa deletada com sucesso.\n    - 401: Usuário não logado.\n    - 404: Tarefa não encontrada ou não pertence ao usuário.\n    - 500: Erro interno do servidor.\n\n\u003cbr\u003e\n\n## Estrutura do projeto\u0026nbsp; :open_file_folder:\n\n``` bash\nsrc\n   |-- config\n   |   |-- blacklist.js\n   |   |-- database.js\n   |-- controllers\n   |   |-- AuthController.js\n   |   |-- TodoController.js\n   |   |-- UserController.js\n   |-- database\n   |   |-- migrations\n   |   |   |-- 20250215164210-create-todos.js\n   |   |   |-- 20250215204534-create-users.js\n   |   |   |-- 20250215220755-add-user-id-to-todos.js\n   |-- middleware\n   |   |-- auth.js\n   |-- models\n   |   |-- index.js\n   |   |-- todos.js\n   |   |-- users.js\n   |-- app.js\n   |-- routes.js\n   |-- server.js\n.env.example\n.gitignore\n.sequelizerc\nDockerfile\ndocker-compose.yaml\nLICENSE\npackage-lock.json\npackage.json\nREADME.md\nswagger.json\nyarn.lock\n```\n\n\u003cbr\u003e\n\n## Motivação de uso de ferramentas\u0026nbsp; 🧰\n\n### Docker\u0026nbsp; 🐳\n\nA utilização do **Docker** concentra vários benefícios, como a facilidade de implantação, de forma que a aplicação funcione da mesma maneira em máquinas diferentes e a padronização do ambiente de desenvolvimento, possibilitando criar containers independentes e isolados.\n\n### Sequelize\u0026nbsp; :diamond_shape_with_a_dot_inside:\n\n**Sequelize** é um ORM (Object-Relational Mapping) para Node.js que facilita o trabalho com bancos de dados SQL. Ele suporta a criação de migrações, o que ajuda a manter o esquema do banco de dados com controle de versão. Além disso, o **Sequelize** simplifica a manipulação de dados com uma API intuitiva, reduzindo a quantidade de código SQL necessário.\n\n\u003cbr\u003e\n\n## Licença\u0026nbsp; 📋\n\nEste software está licenciado sob a [Licença MIT](https://github.com/brenonsc/todos-api/blob/main/LICENSE).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrenonsc%2Ftodos-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrenonsc%2Ftodos-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrenonsc%2Ftodos-api/lists"}