{"id":25852911,"url":"https://github.com/laylajhb/to-do-list_backend-node.js_desafio","last_synced_at":"2026-06-09T03:04:58.639Z","repository":{"id":192096310,"uuid":"686007439","full_name":"LaylaJHB/To-Do-List_Backend-Node.Js_Desafio","owner":"LaylaJHB","description":"To Do List - Sistema de Gerenciamento de Tarefas Back-end através do desenvolvimento de API CRUD. O sistema desenvolvido possui arquitetura de 3 camadas e autenticação JWT. É capaz de: Cadastrar usuário, Realizar login do usuário, Criar tarefa, Atualizar tarefa, Deletar tarefa, Buscar todas as tarefas cadastradas, entre outros","archived":false,"fork":false,"pushed_at":"2025-11-20T14:05:01.000Z","size":500,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-29T21:36:16.328Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/LaylaJHB.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-09-01T14:12:00.000Z","updated_at":"2025-11-20T14:05:05.000Z","dependencies_parsed_at":"2023-11-17T14:05:09.510Z","dependency_job_id":"8de4186e-ceee-4b49-aba2-a77c73374672","html_url":"https://github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio","commit_stats":null,"previous_names":["laylajhb/to-do-list_backend-node.js_desafio"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaylaJHB%2FTo-Do-List_Backend-Node.Js_Desafio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaylaJHB%2FTo-Do-List_Backend-Node.Js_Desafio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaylaJHB%2FTo-Do-List_Backend-Node.Js_Desafio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaylaJHB%2FTo-Do-List_Backend-Node.Js_Desafio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LaylaJHB","download_url":"https://codeload.github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LaylaJHB%2FTo-Do-List_Backend-Node.Js_Desafio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34089359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"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":[],"created_at":"2025-03-01T14:29:54.754Z","updated_at":"2026-06-09T03:04:58.634Z","avatar_url":"https://github.com/LaylaJHB.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\u003cimg src=\"https://img.shields.io/github/last-commit/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio\"/\u003e \u003cimg src=\"https://visitor-badge.laobi.icu/badge?page_id=LaylaJHB.To-Do-List_Backend-Node.Js_Desafio\" /\u003e\n\u003cimg src=\"https://img.shields.io/github/created-at/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio\"/\u003e   \u003cimg src=\"https://img.shields.io/github/license/laylajhb/To-Do-List_Backend-Node.Js_Desafio\"/\u003e \u003ca href=\"https://portifolio2024-bay.vercel.app\"\u003e\u003cimg width=\"90px\" src=\"https://img.shields.io/badge/Portfolio-FF5722?style=for-the-badge\u0026logo=todoist\u0026logoColor=black\")] (https://portifolio2024-bay.vercel.app)\n\u003c/p\u003e\n\u003cbr\u003e\n  \n# Sistema de Gerenciamento de Tarefas\n\n\n\n\u003e **CI automatizada:** a cada *push* ou Pull Request, os testes são executados via GitHub Actions.\n\u003e\n\u003e *Selo verde = testes unitários executados com sucesso; aplicação considerada estável.*\n\u003e \n\u003e [![Run Tests](https://github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio/actions/workflows/test.yml)\n\u003e\n\n\n\n\n\n\u003c!-- linha em branco encerra --\u003e\n\n\n\n\u003cbr\u003e\n\n\u003c!-- linha abaixo deve ficar 100 % vazia – encerra o blockquote --\u003e\n\nO sistema desenvolvido possui arquitetura de 3 camadas e autenticação JWT. É capaz de: cadastrar usuário, autenticar usuário (login), criar tarefa, atualizar tarefa, deletar tarefa, entre outros. O sistema conta com filtros de busca, ordenação, paginação, logs e com testes automatizados com Jest.\n\n## 🌟 Destaques deste projeto Backend:\n\n- ✅ Documentação interativa via Postman.\n- ✅ Arquitetura escalável baseada em 3 camadas (MSC)\n- ✅ Autenticação JWT protegendo rotas sensíveis\n- ✅ Testes unitários com Jest cobrindo a camada de serviços\n- ✅ Integração de logs estruturados com Pino\n- ✅ Validação de entradas e tratamento centralizado de erros (em progresso)\n- ✅ Projeto publicado em ambiente real via Render\n- ✅ CI/CD automatizado com GitHub Actions. --\u003e Run Tests (em fase de melhoria)\n\n---\n\n## 🛠️ Stack\n\n- Backend\n\n---\n\n## 👨‍💻 Tecnologias\n\nEsse projeto foi desenvolvido com as seguintes ferramentas e tecnologias:\n\n* Node.js\n* Typescript\n* SQL\n* MySQL\n* API\n* Postman\n* Knex\n* Cors\n* Express\n* Jest\n\n---\n\n## 🏛️ Arquitetura\n\nArquitetura de software em 3 camadas (3-tiers):\n\n* Controller: camada de interface, comunicação.\n* Bussiness: camada lógica, principal\n* Database: armazenamento e gerenciamento dos dados/informações\n\n---\n\n## 📈 Diagrama de Entidade de Relacionamento (ERD)\n\n![2](https://github.com/user-attachments/assets/de5ebc9c-488a-4078-babe-b57e4a50f746)\n\n---\n\n## 💡Estrutura de Dados\n\n**Para esse projeto são modelados duas entidades:**\n\n- usuário (user)\n- tarefa (task).\n\nCada uma com os seguintes dados:\n\n\n| tarefa (task)                                       | usuário (user) | \n| ----------------------------------------------------| -------------- |\n| • id                                                | • id           |\n| • title                                             | • name         |\n| • description                                       | • email        |\n| • deadline                                          | • password     |\n| • status:*\"pendente, \"em_andamento e \"concluída\"*   | -              |\n| • created_at                                        | -              |\n| • authorId                                          | -              |\n\n---\n\n## ⭕ Endpoints\n\nTodos os endpoints apresentados possuem exemplo de requisição e de resposta da requisição. Acesse a documentação para mais informações.\n\n### User\n- Cadastrar usuário\n- Realizar login do usuário\n- Pegar todos os usuários cadastrados\n- Pegar usuário por Id\n- Atualiza usuário\n- Deletar usuário\n  \n### Task\n- Criar tarefa\n- Atualizar tarefa\n- Deletar tarefa\n- Buscar todas as tarefas cadastradas com paginação e ordenadas por deadline da task\n- Buscar tarefas pelo número da página\n- Buscar tarefas filtradas por título\n- Buscar tarefas filtradas por status\n- Buscar tarefas filtradas por título e status\n- Buscar tarefa específica pelo \"id\"\n  \n## 🧪 Testes automatizados\n\nO projeto conta com testes automatizados usando Jest, visando garantir a qualidade, estabilidade e funcionamento correto das principais funcionalidades relacionadas à criação (signup), autenticação (login) de usuários e demais funcionalidades.\n\n## Testes\n\nUse os comandos abaixo\n\n```bash\n# instalar dependências\nnpm ci\n\n# rodar todos os testes uma única vez\nnpm test\n\n# gerar relatório de cobertura (HTML + texto)\nnpm run test:coverage\n\n# modo watch: monitora alterações e executa apenas\n# os testes impactados durante o desenvolvimento\nnpm run test:watch\n```\n \u003cbr\u003e\n⚙️ O que os testes cobrem:\n\n\u003cbr\u003e\n\n- [✅] createUser - Signup\n- [✅] Login - autenticação\n- [✅] getUsers - Busca todos os usuários\n- [✅] getUserById - Busca usuário por id\n\n \u003cbr\u003e\n\n🔑 createUser - Signup (Cadastro de Usuário):\n\n     - Verificação do comportamento da aplicação quando há ausência de algum dado obrigatório (nome, email ou senha).\n\n     - Garantia que um usuário seja criado com sucesso ao receber dados válidos.\n  \u003cbr\u003e\n\n🗝️ Login (Autenticação de Usuário):\n\n     - Comportamento da aplicação ao tentar logar com um email inexistente.\n\n     - Comportamento ao tentar logar com uma senha incorreta.\n\n     - Validação do sucesso da autenticação ao fornecer credenciais válidas.\n  \u003cbr\u003e\n\n🗝️ getUsers (Buscar todos os usuários cadastrados)\n\n     - Retorna todos os usuários\n\n  \u003cbr\u003e\n\n🗝️ getUserById (Buscar um usuário específico através do ID do seu cadastro):\n\n    - Retorna o usuário quando encontra o id\n\n    - Retorna erro quando o usuário não é encontrado\n \n  \u003cbr\u003e\n\n👉 Resultados esperados\n\n\n![alt text](image.png)\n\n## 🕵 Resultados em video\n\n## Usuários\n\n## 👲 Criar usuário\nAqui apresento um pouco dos resultados obtidos e para começar o video abaixo mostra a criação do usuário com senha criptografada.\n- Ferramenta de requisição: Postman\n- Banco de dados: MySQL\n- Tabela: to_do_list_users\n\nhttps://github.com/user-attachments/assets/fac302fc-8edb-482f-b90d-3dafe37f7a60\n\n\u003cbr\u003e\n\n## 👲 Login do usuário com validações\n  O usuário precisa realizar login para que possa posteriormente criar tarefas. Aqui apresento pequenas validações de login durante a requisição e ao final o login realizado com sucesso.\n- Ferramenta de requisição: Postman\n- Banco de dados: MySQL\n- Tabela: to_do_list_users\n\nhttps://github.com/user-attachments/assets/ed2565cd-1f55-4d09-97e4-8c7ed5c5ec40\n\n## 👲 Buscar todos os usuários\n- Banco de dados: MySQL\n- Tabela: to_do_list_users\n\n\nhttps://github.com/user-attachments/assets/a7cf920b-1a59-4fa6-bef7-a33b1525e854\n\n## Tarefas\n\n## 🧾 Buscar tarefa por título\n- Banco de dados: MySQL\n- Tabela: to_do_list_tasks\n\nhttps://github.com/user-attachments/assets/ea8f4386-baac-47c7-b628-a674b1da863d\n\n\n\n## 🧾 Buscar todas as tarefas ordenadas por deadline\n\nhttps://github.com/user-attachments/assets/c18351ea-08a5-4026-948d-f78a1978ccbf\n\n\n---\n\n\n\n\n\n\n### 👤 Usuário\n\n---\n\nOs endpoints a seguir referentes a usuários devem ter seu \"body\" preenchidos na requisição e como resposta irão retornar \"token\" de autenticação que poderão ser usados em outras requisições. Acesse a documentação para ler detalhes sobre o preenchimento do _body_ e ler mais informações.\n\n- Cadastro de usuário: http://localhost:3003/user/create\n- Login de usuário: http://localhost:3003/user/login\n- Pegar todos os usuários cadastrados: http://localhost:3003/user/getAll\n- Pegar usuário por id: http://localhost:3003/user/getUserById/:id\n- Atualizar usuário: http://localhost:3003/user/updateUserById/\n- Deletar usuário: http://localhost:3003/user/deleteUserById/:id\n\n\u003c/br\u003e\n\n### 🗒️ Tarefa\n\n---\n\nOs endpoints referentes a tarefas devem ter seu \"body\" preenchidos na requisição e como resposta irão retornar \"token\" de autenticação que poderão ser usados em outras requisições. Acesse a documentação para ler detalhes sobre o preenchimento do _body_ e ler mais informações.\n\n- Criar tarefa: http://localhost:3003/task/create\n- Atualizar tarefa: http://localhost:3003/task/updateTaskById/\n  - params -\u003e id\n- Deletar tarefa: http://localhost:3003/task/deleteTaskById/\n  - params -\u003e id\n- Buscar todas as tarefas: http://localhost:3003/task/getAllPosts\n- Buscar tarefa por \"id\": http://localhost:3003/task/searchPost/\n  - params -\u003e id\n- Buscar tarefas filtradas por título: http://localhost:3003/task/getAllPosts\n  - query.params -\u003e title\n- Buscar tarefas filtradas por status: http://localhost:3003/task/getAllPosts\n  - query.params -\u003e status\n- Buscar tarefas filtradas por título e status: http://localhost:3003/task/getAllPosts\n  - query.params -\u003e title\n  - query.params -\u003e status\n- Buscar tarefas por paginação: http://localhost:3003/task/getAllPosts\n  - query.params -\u003e page\n\n---\n\n\n\n## 🔗 Documentação\n\n- **Link da Documentação no Postman:** https://documenter.getpostman.com/view/22349688/2s9YBxZbXr\n\n---\n\n\n## 🛠 Próximos passos\n\n\n\n---\n\n## 🛰 Rodando o Projeto\n\nPara Rodar o projeto, siga as seguintes etapas :\n\n* **Acesse o terminal:** GitBash, Windows PowerShell ou outro\n\n  * **Clone esse repositório:**\n    ```\n    git clone https://github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio.git\n    ```\n  * **Instale as dependências do projeto:** rode o comando\n    ```\n    npm install\n    ```\n* **Crie um arquivo com nome .env no diretório raiz do projeto:**\n\n  ```\n  touch .env\n  ```\n* **Acesse o arquivo .env, adicione as variáveis de ambiente e preencha as credenciais de acesso do seu Banco de Dados:**\n\n  * `DB_HOST = `\n  * `DB_USER = `\n  * `DB_PASS = `\n  * `DB_NAME = `\n  * `PORT = 3306`\n\n* Execute o script para criar as tabelas de usuários e tarefas, respectivemente:\n    * to_do_list_users\n    * to_do_list_tasks\n* **Acesse novamente o terminal**\n\n  * **Inicie o projeto:** rode o comando\n    ```\n    npm start\n    ```\n\n## **Rode os scripts abaixo para criar as tabelas e os dados**\n\n\n## Scripts\n  * migrate:latest: Aplica todas as migrações pendentes no banco de dados.\n    ```\n    npm run migrate:latest\n    ```\n  * migrate:rollback: Desfaz a última migração executada.\n    ```\n    npm run migrate:rollback\n    ```\n\n## 🕵 Desafio\n  \u003cdetails\u003e\n    \u003csummary\u003eO início desse projeto faz parte de um desafio para uma vaga backend. As informações referentes ao desafio estão aqui nesse toggle. Após o desafio, venho implementando novas features no projeto, as quais poderão ver mais a frente.\n    \u003c/summary\u003e\n---\n\nDesenvolvimento de API CRUD\n\n---\n\n## 🧑‍🚀Tema\n\nSistema de Gerenciamento de Tarefas\n\n---\n\n\n## 🧭Status\n\n- Projeto: feito e aprovado\n- Resultado da Seleção para vaga Backend Developer II: aprovada (selecionada para a vaga)\n\n---\n\n## Status do Projeto após aprovação\n\n- ⏳ Adicionando features\n\n---\n\n## 🎯Objetivo do Projeto\n\nCriar uma API RESTful completa, demonstrando sua capacidade de desenvolvimento em um ambiente realista. A API será um sistema de gerenciamento de tarefas.\n\n- [✅] Cadastro de Tarefas: Cada tarefa deve conter um título, descrição e status (pendente, em andamento, concluída).\n  Utilize um banco de dados de sua escolha: SQL (por exemplo, MySQL) ou não-relacional (por exemplo, MongoDB).título, descrição e status (pendente, em andamento, concluída).\n- [✅] Listagem de Tarefas: Os usuários devem poder listar todas as tarefas cadastradas.\n- [✅] Atualização de Tarefas: Os usuários devem poder atualizar detalhes e status de uma tarefa existente.\n- [✅] Exclusão de Tarefas: Os usuários devem poder excluir uma tarefa.\n\n---\n\n## ☑️Requisitos Técnicos\n\n- [✅] Utilize Node.js e Express para criar a API.\n- [✅] Organize o código utilizando o padrão MSC (Model-Service-Controller).\n- [✅] Integre autenticação JWT para proteger as rotas de atualização e exclusão de tarefas.\n- [✅] Utilize um banco de dados de sua escolha: SQL (por exemplo, SQLite, PostgreSQL) ou não-relacional (por exemplo, Firebase Realtime Database).\n- [✅] Implemente endpoints de busca e filtro para as tarefas (por título, por status, etc.).\n- [✅] Forneça documentação clara para a API, incluindo detalhes sobre as rotas, parâmetros e respostas. (Opcional)\n\n---\n\n## ☑️Critérios de Avaliação\n\nO critério predominante neste desafio é a qualidade do código e a organização do projeto. Será avaliado como você segue as melhores práticas, mantém um código limpo e estruturado, e organiza a lógica de acordo com o padrão MSC.\n\n---\n\n## ☑️Entrega\n\nCompartilhe o código-fonte do projeto através de um repositório no GitHub. Certifique-se de incluir um arquivo README que explique como configurar e executar o projeto localmente, instruções para instalação de dependências e detalhes sobre as rotas da API. O critério predominante neste desafio é a qualidade do código e a organização do projeto. Será avaliado como você segue as melhores práticas, mantém um código limpo e estruturado, e organiza a lógica de acordo com o padrão MSC.\n\n---\n\n\n\u003c/details\u003e\n  \n---\n\n## 🧑‍🚀 Autor\n\n- Layla Janaína Hissa Borges\n\n---\n\n## 📝 Sobre a Licença\n\nEste projeto esta sobe a licença [MIT](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaylajhb%2Fto-do-list_backend-node.js_desafio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flaylajhb%2Fto-do-list_backend-node.js_desafio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flaylajhb%2Fto-do-list_backend-node.js_desafio/lists"}