https://github.com/laylajhb/to-do-list_backend-node.js_desafio
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
https://github.com/laylajhb/to-do-list_backend-node.js_desafio
Last synced: about 1 month ago
JSON representation
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
- Host: GitHub
- URL: https://github.com/laylajhb/to-do-list_backend-node.js_desafio
- Owner: LaylaJHB
- Created: 2023-09-01T14:12:00.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2025-11-20T14:05:01.000Z (8 months ago)
- Last Synced: 2025-11-29T21:36:16.328Z (7 months ago)
- Language: TypeScript
- Homepage:
- Size: 488 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Sistema de Gerenciamento de Tarefas
> **CI automatizada:** a cada *push* ou Pull Request, os testes são executados via GitHub Actions.
>
> *Selo verde = testes unitários executados com sucesso; aplicação considerada estável.*
>
> [](https://github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio/actions/workflows/test.yml)
>
O 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.
## 🌟 Destaques deste projeto Backend:
- ✅ Documentação interativa via Postman.
- ✅ Arquitetura escalável baseada em 3 camadas (MSC)
- ✅ Autenticação JWT protegendo rotas sensíveis
- ✅ Testes unitários com Jest cobrindo a camada de serviços
- ✅ Integração de logs estruturados com Pino
- ✅ Validação de entradas e tratamento centralizado de erros (em progresso)
- ✅ Projeto publicado em ambiente real via Render
- ✅ CI/CD automatizado com GitHub Actions. --> Run Tests (em fase de melhoria)
---
## 🛠️ Stack
- Backend
---
## 👨💻 Tecnologias
Esse projeto foi desenvolvido com as seguintes ferramentas e tecnologias:
* Node.js
* Typescript
* SQL
* MySQL
* API
* Postman
* Knex
* Cors
* Express
* Jest
---
## 🏛️ Arquitetura
Arquitetura de software em 3 camadas (3-tiers):
* Controller: camada de interface, comunicação.
* Bussiness: camada lógica, principal
* Database: armazenamento e gerenciamento dos dados/informações
---
## 📈 Diagrama de Entidade de Relacionamento (ERD)

---
## 💡Estrutura de Dados
**Para esse projeto são modelados duas entidades:**
- usuário (user)
- tarefa (task).
Cada uma com os seguintes dados:
| tarefa (task) | usuário (user) |
| ----------------------------------------------------| -------------- |
| • id | • id |
| • title | • name |
| • description | • email |
| • deadline | • password |
| • status:*"pendente, "em_andamento e "concluída"* | - |
| • created_at | - |
| • authorId | - |
---
## ⭕ Endpoints
Todos os endpoints apresentados possuem exemplo de requisição e de resposta da requisição. Acesse a documentação para mais informações.
### User
- Cadastrar usuário
- Realizar login do usuário
- Pegar todos os usuários cadastrados
- Pegar usuário por Id
- Atualiza usuário
- Deletar usuário
### Task
- Criar tarefa
- Atualizar tarefa
- Deletar tarefa
- Buscar todas as tarefas cadastradas com paginação e ordenadas por deadline da task
- Buscar tarefas pelo número da página
- Buscar tarefas filtradas por título
- Buscar tarefas filtradas por status
- Buscar tarefas filtradas por título e status
- Buscar tarefa específica pelo "id"
## 🧪 Testes automatizados
O 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.
## Testes
Use os comandos abaixo
```bash
# instalar dependências
npm ci
# rodar todos os testes uma única vez
npm test
# gerar relatório de cobertura (HTML + texto)
npm run test:coverage
# modo watch: monitora alterações e executa apenas
# os testes impactados durante o desenvolvimento
npm run test:watch
```
⚙️ O que os testes cobrem:
- [✅] createUser - Signup
- [✅] Login - autenticação
- [✅] getUsers - Busca todos os usuários
- [✅] getUserById - Busca usuário por id
🔑 createUser - Signup (Cadastro de Usuário):
- Verificação do comportamento da aplicação quando há ausência de algum dado obrigatório (nome, email ou senha).
- Garantia que um usuário seja criado com sucesso ao receber dados válidos.
🗝️ Login (Autenticação de Usuário):
- Comportamento da aplicação ao tentar logar com um email inexistente.
- Comportamento ao tentar logar com uma senha incorreta.
- Validação do sucesso da autenticação ao fornecer credenciais válidas.
🗝️ getUsers (Buscar todos os usuários cadastrados)
- Retorna todos os usuários
🗝️ getUserById (Buscar um usuário específico através do ID do seu cadastro):
- Retorna o usuário quando encontra o id
- Retorna erro quando o usuário não é encontrado
👉 Resultados esperados

## 🕵 Resultados em video
## Usuários
## 👲 Criar usuário
Aqui apresento um pouco dos resultados obtidos e para começar o video abaixo mostra a criação do usuário com senha criptografada.
- Ferramenta de requisição: Postman
- Banco de dados: MySQL
- Tabela: to_do_list_users
https://github.com/user-attachments/assets/fac302fc-8edb-482f-b90d-3dafe37f7a60
## 👲 Login do usuário com validações
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.
- Ferramenta de requisição: Postman
- Banco de dados: MySQL
- Tabela: to_do_list_users
https://github.com/user-attachments/assets/ed2565cd-1f55-4d09-97e4-8c7ed5c5ec40
## 👲 Buscar todos os usuários
- Banco de dados: MySQL
- Tabela: to_do_list_users
https://github.com/user-attachments/assets/a7cf920b-1a59-4fa6-bef7-a33b1525e854
## Tarefas
## 🧾 Buscar tarefa por título
- Banco de dados: MySQL
- Tabela: to_do_list_tasks
https://github.com/user-attachments/assets/ea8f4386-baac-47c7-b628-a674b1da863d
## 🧾 Buscar todas as tarefas ordenadas por deadline
https://github.com/user-attachments/assets/c18351ea-08a5-4026-948d-f78a1978ccbf
---
### 👤 Usuário
---
Os 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.
- Cadastro de usuário: http://localhost:3003/user/create
- Login de usuário: http://localhost:3003/user/login
- Pegar todos os usuários cadastrados: http://localhost:3003/user/getAll
- Pegar usuário por id: http://localhost:3003/user/getUserById/:id
- Atualizar usuário: http://localhost:3003/user/updateUserById/
- Deletar usuário: http://localhost:3003/user/deleteUserById/:id
### 🗒️ Tarefa
---
Os 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.
- Criar tarefa: http://localhost:3003/task/create
- Atualizar tarefa: http://localhost:3003/task/updateTaskById/
- params -> id
- Deletar tarefa: http://localhost:3003/task/deleteTaskById/
- params -> id
- Buscar todas as tarefas: http://localhost:3003/task/getAllPosts
- Buscar tarefa por "id": http://localhost:3003/task/searchPost/
- params -> id
- Buscar tarefas filtradas por título: http://localhost:3003/task/getAllPosts
- query.params -> title
- Buscar tarefas filtradas por status: http://localhost:3003/task/getAllPosts
- query.params -> status
- Buscar tarefas filtradas por título e status: http://localhost:3003/task/getAllPosts
- query.params -> title
- query.params -> status
- Buscar tarefas por paginação: http://localhost:3003/task/getAllPosts
- query.params -> page
---
## 🔗 Documentação
- **Link da Documentação no Postman:** https://documenter.getpostman.com/view/22349688/2s9YBxZbXr
---
## 🛠 Próximos passos
---
## 🛰 Rodando o Projeto
Para Rodar o projeto, siga as seguintes etapas :
* **Acesse o terminal:** GitBash, Windows PowerShell ou outro
* **Clone esse repositório:**
```
git clone https://github.com/LaylaJHB/To-Do-List_Backend-Node.Js_Desafio.git
```
* **Instale as dependências do projeto:** rode o comando
```
npm install
```
* **Crie um arquivo com nome .env no diretório raiz do projeto:**
```
touch .env
```
* **Acesse o arquivo .env, adicione as variáveis de ambiente e preencha as credenciais de acesso do seu Banco de Dados:**
* `DB_HOST = `
* `DB_USER = `
* `DB_PASS = `
* `DB_NAME = `
* `PORT = 3306`
* Execute o script para criar as tabelas de usuários e tarefas, respectivemente:
* to_do_list_users
* to_do_list_tasks
* **Acesse novamente o terminal**
* **Inicie o projeto:** rode o comando
```
npm start
```
## **Rode os scripts abaixo para criar as tabelas e os dados**
## Scripts
* migrate:latest: Aplica todas as migrações pendentes no banco de dados.
```
npm run migrate:latest
```
* migrate:rollback: Desfaz a última migração executada.
```
npm run migrate:rollback
```
## 🕵 Desafio
O 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.
---
Desenvolvimento de API CRUD
---
## 🧑🚀Tema
Sistema de Gerenciamento de Tarefas
---
## 🧭Status
- Projeto: feito e aprovado
- Resultado da Seleção para vaga Backend Developer II: aprovada (selecionada para a vaga)
---
## Status do Projeto após aprovação
- ⏳ Adicionando features
---
## 🎯Objetivo do Projeto
Criar uma API RESTful completa, demonstrando sua capacidade de desenvolvimento em um ambiente realista. A API será um sistema de gerenciamento de tarefas.
- [✅] Cadastro de Tarefas: Cada tarefa deve conter um título, descrição e status (pendente, em andamento, concluída).
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).
- [✅] Listagem de Tarefas: Os usuários devem poder listar todas as tarefas cadastradas.
- [✅] Atualização de Tarefas: Os usuários devem poder atualizar detalhes e status de uma tarefa existente.
- [✅] Exclusão de Tarefas: Os usuários devem poder excluir uma tarefa.
---
## ☑️Requisitos Técnicos
- [✅] Utilize Node.js e Express para criar a API.
- [✅] Organize o código utilizando o padrão MSC (Model-Service-Controller).
- [✅] Integre autenticação JWT para proteger as rotas de atualização e exclusão de tarefas.
- [✅] Utilize um banco de dados de sua escolha: SQL (por exemplo, SQLite, PostgreSQL) ou não-relacional (por exemplo, Firebase Realtime Database).
- [✅] Implemente endpoints de busca e filtro para as tarefas (por título, por status, etc.).
- [✅] Forneça documentação clara para a API, incluindo detalhes sobre as rotas, parâmetros e respostas. (Opcional)
---
## ☑️Critérios de Avaliação
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.
---
## ☑️Entrega
Compartilhe 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.
---
---
## 🧑🚀 Autor
- Layla Janaína Hissa Borges
---
## 📝 Sobre a Licença
Este projeto esta sobe a licença [MIT](./LICENSE).