{"id":16483007,"url":"https://github.com/lucasvmarangoni/tasklist","last_synced_at":"2025-12-30T22:02:52.618Z","repository":{"id":149939732,"uuid":"591498291","full_name":"Lucasvmarangoni/TaskList","owner":"Lucasvmarangoni","description":"Rest API for task list application, developed with Express, Typescript and Prisma, applying TDD and principles of DDD","archived":false,"fork":false,"pushed_at":"2023-09-25T20:21:38.000Z","size":393372,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-23T22:11:02.345Z","etag":null,"topics":["bcript","express","express-openapi","graceful-shutdown","http-status-codes","json-web-token","mongodb","mongodb-atlas","node-config","nodejs","openapi","overnightjs","pino","prisma-studio","supertest","typescript","vitest"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/Lucasvmarangoni.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":"2023-01-20T22:48:31.000Z","updated_at":"2025-07-10T06:23:26.000Z","dependencies_parsed_at":"2023-06-28T12:00:09.761Z","dependency_job_id":"4daff5f8-7a35-4614-a352-31085c3eb9f3","html_url":"https://github.com/Lucasvmarangoni/TaskList","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Lucasvmarangoni/TaskList","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lucasvmarangoni%2FTaskList","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lucasvmarangoni%2FTaskList/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lucasvmarangoni%2FTaskList/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lucasvmarangoni%2FTaskList/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lucasvmarangoni","download_url":"https://codeload.github.com/Lucasvmarangoni/TaskList/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lucasvmarangoni%2FTaskList/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28132976,"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-12-30T02:00:05.476Z","response_time":64,"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":["bcript","express","express-openapi","graceful-shutdown","http-status-codes","json-web-token","mongodb","mongodb-atlas","node-config","nodejs","openapi","overnightjs","pino","prisma-studio","supertest","typescript","vitest"],"created_at":"2024-10-11T13:12:44.482Z","updated_at":"2025-12-30T22:02:52.583Z","avatar_url":"https://github.com/Lucasvmarangoni.png","language":"TypeScript","readme":"\u003cdiv align=\"center\"\u003e\n\u003ca href=\"#projeto\" target=\"_blank\"\u003e\n    \u003cimg align=\"center\" src=\"https://img.shields.io/badge/-Projeto-05122A?style=flat\u0026logo=Projeto\" alt=\"\"/\u003e\n  \u003c/a\u003e\n  \u003ca href=\"#tecnologias\"\u003e\n     \u003cimg align=\"center\" src=\"https://img.shields.io/badge/-Tecnologias-05122A?style=flat\u0026logo=Tecnologias\" alt=\"\"/\u003e\n  \u003c/a\u003e  \n  \u003c/a\u003e  \n     \u003ca href=\"#instalação\"\u003e\n     \u003cimg align=\"center\" src=\"https://img.shields.io/badge/-Instalação-05122A?style=flat\u0026logo=Tecnologias\" alt=\"\"/\u003e\n     \u003c/a\u003e\n     \u003ca href=\"#registro-de-desenvolvimento\"\u003e\n     \u003cimg align=\"center\" src=\"https://img.shields.io/badge/-Registro%20de%20Desenvolvimento-05122A?style=flat\u0026logo=Tecnologias\" alt=\"\"/\u003e\n     \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n# Projeto Lista de Tarefas\n\n\n# (Backend)\n![version](https://img.shields.io/badge/version-2.1.0-white)\n\n\n\u003c/div\u003e\n\n\u003cbr\u003e\u003cbr\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n## Projeto\n\n\u003c/div\u003e\n\nO projeto é uma API REST para servir uma aplicação de Lista de tarefas, seguindo o padrão CRUD, com sistema de notificação.\n\n- Projeto planejado e desenvolvi por mim. \n- Finalidade: aprendizado, prática e portfólio.\n\n\u003cbr\u003e\n\n### Objetivo \n\nInicialmente teve o objetivo de consolidar meus conhecimentos de Back-end e Engenharia de Software, além de praticar a utilização de Node.js com Express e Prisma Studio. O objetivo agora é continuar utilizando esse projeto para praticar, aprimorando-o com as novas habilidades, tecnologias e ferramentas que adquiro.\n\n\u003cbr\u003e\n\n\n\n## Instalação\n\n     npm i\n\n\n### Database\nÉ necessário criar um cluster no MongoDB Atlas ou configurar um banco de dados mongoDB para o prisma studio. A url deve ser colocada em uma variável de ambiente no arquivo .env nomeada de DATABASE_URL.\n- Recomendo criar o cluster no Atlas, pois será muito mais rápido e fácil.\n\n\u003cdiv align=\"center\"\u003e\n\n## Tecnologias\n\n\u003c/div\u003e\n\n\n\u003ctable width=\"300px\" align=\"center\"\u003e\n      \u003ccaption\u003e \n      \u003c/caption\u003e\t         \n       \u003cthead\u003e                      \n               \u003cth width=\"50%px\" style=\"text-align:center\" colspan=\"1\"\u003ev2.0.0\u003c/th\u003e                  \n               \u003cth width=\"50%px\" style=\"text-align:center\" colspan=\"2\"\u003ev2.1.0\u003c/th\u003e                  \n       \u003c/thead\u003e\n       \u003ctbody align=\"center\"\u003e          \n           \u003ctr\u003e                           \n                \u003ctd colspan=\"1\"\u003eTypeScript\u003c/th\u003e                              \n                \u003ctd colspan=\"2\"\u003eOvernight.js\u003c/th\u003e                              \n           \u003c/tr\u003e\n           \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003eNode.js\u003c/th\u003e     \n                 \u003ctd colspan=\"2\"\u003eHttp status codes\u003c/th\u003e                               \n           \u003c/tr\u003e           \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003eExpress\u003c/th\u003e          \n                 \u003ctd colspan=\"2\"\u003ePino\u003c/th\u003e\n           \u003c/tr\u003e           \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003eSQLite\u003c/th\u003e           \n                 \u003ctd colspan=\"2\"\u003eExpress pino logger\u003c/th\u003e                \n           \u003c/tr\u003e           \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003ePrisma Studio\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eNode cache\u003c/th\u003e   \n            \u003c/tr\u003e   \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003eVitest\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eSupertest\u003c/th\u003e                    \n            \u003c/tr\u003e  \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003eClass-validator\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eSQLite \u0026#8594; MongoDB\u003c/th\u003e   \n            \u003c/tr\u003e                             \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eMongoDB Atlas\u003c/th\u003e   \n            \u003c/tr\u003e    \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eSwagger-ui express\u003c/th\u003e   \n            \u003c/tr\u003e     \n             \u003c/tr\u003e                             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eExpress openapi validator\u003c/th\u003e   \n            \u003c/tr\u003e     \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eExpress rate limit\u003c/th\u003e   \n            \u003c/tr\u003e  \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eGithub actions\u003c/th\u003e   \n            \u003c/tr\u003e\n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eNode Config\u003c/th\u003e   \n            \u003c/tr\u003e      \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eBcrypt\u003c/th\u003e   \n            \u003c/tr\u003e   \n            \u003ctr\u003e             \n                 \u003ctd colspan=\"1\"\u003e\u003c/th\u003e   \n                 \u003ctd colspan=\"2\"\u003eJson Web Token\u003c/th\u003e   \n            \u003c/tr\u003e                  \n       \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003cbr\u003e\n\n## Registro de Desenvolvimento\n\n- Link para o código da versão nas badges.\n\n\u003cbr\u003e\n\n\u003ca href=\"\" title=\"Não possui link da versão 1.0.0\"\u003e![version](https://img.shields.io/badge/version-1.0.0-white)\u003c/a\u003e \n\u003cbr\u003e\nO projeto teve seu desenvolvimento iniciado com um back-end simples e básico.\n\u003cbr\u003e\n\u003cbr\u003e\n\u003ca href=\"https://github.com/Lucasvmarangoni/TaskList/tree/2690efd2b1ca82fe52ce211c912a0f021fd8d8eb\" title=\"clique para ver o código da versão 2.0.0\"\u003e![version](https://img.shields.io/badge/version-2.0.0-white)\u003c/a\u003e \n\u003cbr\u003e\nO projeto passou a ser uma API REST, CRUD, com sistema de notificação, desenvolvida com Node.js, Express e Typescript, aplicando testes unitários,\nvalidações, DDD, TDD, in memory database, factory pattern, singleton, inversão de dependência e princípios SOLID.\n\u003cbr\u003e\n\u003cbr\u003e\n\u003ca href=\"https://github.com/Lucasvmarangoni/TaskList\" title=\"clique para ver o código da versão 2.1.0\"\u003e![version](https://img.shields.io/badge/version-2.1.0-black)\u003c/a\u003e \n\u003cbr\u003e\nNesta atualização, estou aprimorando testes, mocks, testes end to end, tratando erros, status code, logging, cache, graceful\nshutdown, troca do banco de dados, documentação OpenAPI, workflow, autenticação com criptografia e refatoração.\n\n\u003cbr\u003e\n\n\n\n\n\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasvmarangoni%2Ftasklist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucasvmarangoni%2Ftasklist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucasvmarangoni%2Ftasklist/lists"}