Esta é uma API RESTful desenvolvida com Node.js e TypeScript para gerenciar projetos e tarefas em um sistema de quadro Kanban.
Para rodar o projeto, siga os passos abaixo:
-
Rode o Docker Compose para iniciar o banco de dados:
sudo docker compose up -d
-
Crie o arquivo
.envcom base no.env.example:cp .env.example .env
-
Execute o script
migrate-db.shpara aplicar as migrações no banco de dados principal e no banco de dados de testes:
linux:
bash ./migrate-db.shwindows:
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force; .\run_migrations.ps1-
Instale as dependências do projeto:
npm install
-
Gere os arquivos do Prisma e aplique as migrações do banco de dados:
npm run build
-
Inicie a aplicação em modo de desenvolvimento:
npm run start:dev
-
Para iniciar a aplicação em modo de produção:
npm run start:prod
-
Acesse
http://localhost:3000/api/v1/para ver a rota de health check e verificar se está rodando -
Acesse
http://localhost:3000/api/v1/docspara ver as possíveis rotas pela documentação do swagger
Para rodar os testes, siga os passos abaixo:
-
Execute o script
migrate-db.shpara aplicar as migrações no banco de dados principal e no banco de dados de testes (Se você rodou no passo anterior não será necessário nesse passo):./migrate-db.sh
-
Rode os testes automatizados:
npm run test:unit
-
Para rodar os testes de integração:
npm run test:integration
-
Para verificar a cobertura dos testes:
npm run test:cov
- NestJS: Framework modular e escalável para aplicações backend, baseado em TypeScript, que facilita a criação de APIs e a implementação de arquitetura limpa.
- PostgreSQL + Prisma: PostgreSQL é um banco de dados relacional robusto e confiável. Prisma oferece uma ORM moderna e eficiente, simplificando as interações com o banco de dados e melhorando a produtividade no desenvolvimento.
- JWT (JSON Web Token): Utilizado para autenticação e autorização de usuários, permitindo comunicação segura entre frontend e backend através de tokens.
- Class-validator: Biblioteca para validação de dados no backend, garantindo a integridade e consistência dos dados antes de serem processados.
- Jest: Framework de testes que facilita a criação e execução de testes unitários e de integração, garantindo a qualidade do código.
- Swagger: Ferramenta para gerar documentação interativa da API, facilitando a compreensão e o uso da API por outros desenvolvedores.
- Winston: Logger flexível e poderoso, permitindo o registro eficiente de logs e a integração com ferramentas de monitoramento como Papertrail.
- Clean Architecture: Padrão de arquitetura que separa as preocupações do sistema, facilitando a manutenção, escalabilidade e testabilidade.
- RBAC (Role-Based Access Control): Mecanismo de controle de acesso baseado em funções, garantindo que usuários tenham apenas as permissões necessárias para suas atividades.
- Docker: Ferramenta para containerizar a aplicação, garantindo consistência nos ambientes de desenvolvimento, testes e produção.
- GitHub Actions: Serviço de CI/CD para automatizar o processo de integração contínua e entrega contínua, garantindo que os testes sejam executados e a qualidade do código seja mantida.
- Sonar: Ferramenta de análise estática de código, integrada ao GitHub Actions, para escanear e identificar problemas de segurança, bugs e vulnerabilidades no código.
- Papertrail: Serviço de logging que facilita o monitoramento de logs em tempo real, integrando-se ao Heroku e permitindo visualização e análise de erros e sucessos, além de ser compatível com Grafana para dashboards de performance.
- Login de Usuário: Verifica as credenciais do usuário e gera um token JWT para autenticação.
- Registro de Usuário: Cria uma nova conta de usuário com as informações fornecidas.
- Obter Perfil do Usuário: Recupera os detalhes do usuário autenticado usando o token de acesso.
- Listar Usuários: Retorna uma lista paginada de usuários.
- Obter Detalhes de um Usuário: Fornece informações detalhadas de um usuário específico.
- Atualizar Usuário: Permite a atualização das informações de um usuário.
- Remover Usuário: Exclui um usuário do sistema.
- Criar Projeto: Cria um novo projeto com os dados fornecidos.
- Listar Projetos: Retorna uma lista paginada de projetos.
- Obter Detalhes de um Projeto: Fornece informações detalhadas de um projeto específico.
- Atualizar Projeto: Permite a atualização das informações de um projeto.
- Remover Projeto: Exclui um projeto do sistema.
- Adicionar Membro ao Projeto: Adiciona um usuário como membro de um projeto.
- Remover Membro do Projeto: Remove um usuário de um projeto.
- Listar Membros do Projeto: Retorna uma lista de membros de um projeto.
- Listar Tarefas do Projeto: Retorna uma lista de tarefas associadas a um projeto.
- Criar Tarefa: Cria uma nova tarefa com os dados fornecidos.
- Listar Tarefas: Retorna uma lista paginada e filtrada de tarefas.
- Obter Detalhes de uma Tarefa: Fornece informações detalhadas de uma tarefa específica.
- Atualizar Tarefa: Permite a atualização das informações de uma tarefa.
- Mover Tarefa entre Projetos: Permite mover uma tarefa de um projeto para outro.
- Remover Tarefa: Exclui uma tarefa do sistema.
- Atribuir Tarefa a Usuário: Atribui uma tarefa a um usuário específico.
- Desatribuir Tarefa de Usuário: Remove a atribuição de uma tarefa de um usuário.
- Listar Usuários de uma Tarefa: Retorna uma lista de usuários atribuídos a uma tarefa.
- Utilizado o winston para organização de logs por data, hora e tipo (success e error) exemplo de log: ´./logs/2025-03-21-error.log
./logs/2025-03-21-error.log
2025-03-21T19:36:52.639Z [error]: POST /auth/login - Cannot POST /auth/login
2025-03-21T19:37:01.338Z [error]: POST /api/v1/auth/login - ThrottlerException: Too Many Requests
./logs/2025-03-21-success.log
2025-03-21T19:36:40.407Z [info]: GET /api/v1/ - 200
2025-03-21T19:36:59.407Z [info]: POST /api/v1/auth/login - 201
GET /api/v1/curl -X GET "http://localhost:3000/api/v1/"POST /api/v1/auth/login
Content-Type: application/json
{
"email": "test3@gmail.com",
"password": "123456"
}curl -X POST "http://localhost:3000/api/v1/auth/login" -H "Content-Type: application/json" -d '{
"email": "test3@gmail.com",
"password": "123456"
}'POST /api/v1/auth/register
Content-Type: application/json
{
"email": "test3@gmail.com",
"password": "123456",
"name": "test3"
}curl -X POST "http://localhost:3000/api/v1/auth/register" -H "Content-Type: application/json" -d '{
"email": "test3@gmail.com",
"password": "123456",
"name": "test3"
}'GET /api/v1/users
Authorization: Bearer <token>curl -X GET "http://localhost:3000/api/v1/users" -H "Authorization: Bearer <token>"GET /api/v1/users/profile
Authorization: Bearer <token>curl -X GET "http://localhost:3000/api/v1/users/profile" -H "Authorization: Bearer <token>"GET /api/v1/projects
Authorization: Bearer <token>curl -X GET "http://localhost:3000/api/v1/projects" -H "Authorization: Bearer <token>"POST /api/v1/projects
Authorization: Bearer <token>
Content-Type: application/json
{
"name": "Projeto Teste"
}curl -X POST "http://localhost:3000/api/v1/projects" -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '{
"name": "Projeto Teste"
}'POST /api/v1/projects/{projectId}/members
Authorization: Bearer <token>
Content-Type: application/json
{
"userId": "a9695178-55b3-476b-9073-442c0d3fe8e4"
}curl -X POST "http://localhost:3000/api/v1/projects/{projectId}/members" -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '{
"userId": "a9695178-55b3-476b-9073-442c0d3fe8e4"
}'POST /api/v1/tasks
Authorization: Bearer <token>
Content-Type: application/json
{
"title": "Tarefa Teste",
"projectId": "9f7bda77-7ca7-4be8-b29c-c318b081f59b"
}curl -X POST "http://localhost:3000/api/v1/tasks" -H "Authorization: Bearer <token>" -H "Content-Type: application/json" -d '{
"title": "Tarefa Teste",
"projectId": "9f7bda77-7ca7-4be8-b29c-c318b081f59b"
}'GET /api/v1/tasks
Authorization: Bearer <token>curl -X GET "http://localhost:3000/api/v1/tasks" -H "Authorization: Bearer <token>"Para mais detalhes sobre as rotas e como utilizá-las, consulte a documentação interativa gerada pelo Swagger:
Swagger API Docs
ou na rota /api/v1/docs da aplicação rodando localmente
kanban-api/
│── src/
│ ├── application/
│ │ ├── use-cases/
│ ├── domain/
│ │ ├── entities/
│ │ ├── repositories/
│ ├── infrastructure/
│ │ ├── database/
│ │ │ ├── migrations/
│ │ ├── http/
│ │ │ ├── controllers/
│ │ │ ├── middlewares/
│ │ │ ├── routes/
│ │ ├── security/
│ │ ├── logging/
│ ├── tests/
│ │ ├── db/
│ │ ├── repositories/
│ │ ├── controllers/
│── logs/
│── .env
│── .gitignore
│── package.json
│── tsconfig.json
│── README.md
POST /auth/login- Login de usuárioPOST /auth/register- Registro de usuário
GET /users/profile- Obter detalher de um usuário baseado no token de acesso usadoGET /users- Listar usuários (paginação)GET /users/:id- Obter detalhes de um usuárioPUT /users/:id- Atualizar usuárioDELETE /users/:id- Remover usuário
POST /projects- Criar um projetoGET /projects- Listar projetos (paginação)GET /projects/:id- Obter detalhes de um projetoPUT /projects/:id- Atualizar projetoDELETE /projects/:id- Remover projetoPOST /projects/:id/members- Adicionar membro ao projetoDELETE /projects/:id/members- Remover membro do projetoGET /projects/:id/members- Listar membros do projetoGET /projects/:id/tasks- Listar tarefas do projeto
POST /tasks- Criar uma tarefaGET /tasks- Listar tarefas (paginação e filtros)GET /tasks/:id- Obter detalhes de uma tarefaPUT /tasks/:id- Atualizar tarefaPATCH /tasks/:id/move- Mover tarefa entre projetosDELETE /tasks/:id- Remover tarefa
- Implementação de tratamento de cookies para gerenciar sessões de usuário e preferências;
- Adição de outros tipos de roles para autorização, permitindo um controle de acesso mais granular;
- Notificações em tempo real (e.g., WebSockets, Firebase);
- Implementação de um sistema de comentários para tarefas e projetos;
- Adição de suporte a anexos em tarefas e projetos, utilizando Amazon S3 para armazenamento seguro e escalável;
- Implementação de Sentry para monitoramento e rastreamento de erros em tempo real, facilitando a identificação e correção de problemas na aplicação;
- Dockerização da aplicação para servir com EC2.