Esta é uma API RESTful para gerenciar uma lista de tarefas (todos). A API foi construída utilizando Node.js, Express, TypeScript e Prisma ORM, seguindo um padrão de camadas. O banco de dados utilizado é o PostgreSQL. O projeto inclui validações, tratamento de erros e segue boas práticas de codificação com ESLint e Prettier.
- Node.js
- Express
- TypeScript
- Prisma ORM
- PostgreSQL
- ESLint - para manter a qualidade do código
- Prettier - para formatação do código
- dotenv - para variáveis de ambiente
- express-async-errors - para tratamento de erros assíncronos
-
Clone o repositório:
git clone https://github.com/seu-usuario/nome-do-repositorio.git cd nome-do-repositorio
-
Instale as dependências:
npm install
-
Configure as variáveis de ambiente:
Crie um arquivo
.env
na raiz do projeto e adicione as seguintes variáveis:DATABASE_URL="postgresql://user:password@localhost:5432/mydatabase"
-
Execute as migrações do banco de dados:
npx prisma migrate dev
Para iniciar o servidor, use o comando:
npm run dev
Carrega todas as tarefas.
Response:
[
{ "id": 74, "completed": false, "userId": 4, "title": "expedita tempore nobis eveniet laborum maiores", "createdAt": "2020-07-06T14:30:32.542Z", "updatedAt": "2020-07-06T14:30:32.542Z" },
{ "id": 77, "completed": true, "userId": 4, "title": "consequatur illum asperiores", "createdAt": "2020-07-06T14:30:32.542Z", "updatedAt": "2020-07-06T14:30:32.542Z" },
{ "id": 83, "completed": false, "userId": 5, "title": "rerum est autem sunt rem eveniet architecto", "createdAt": "2020-07-06T14:30:32.542Z", "updatedAt": "2020-07-06T14:30:32.542Z" }
]
Carrega todas as tarefas concluídas do usuário com ID 2.
Response:
[
{ "id": 77, "completed": true, "userId": 2, "title": "consequatur illum asperiores", "createdAt": "2020-07-06T14:30:32.542Z", "updatedAt": "2020-07-06T14:30:32.542Z" }
]
Carrega uma tarefa pelo ID.
Response:
{
"id": 74,
"userId": 4,
"completed": false,
"title": "expedita tempore nobis eveniet laborum maiores",
"createdAt": "2020-07-06T14:30:32.542Z",
"updatedAt": "2020-07-06T14:30:32.542Z"
}
Cria uma nova tarefa.
Request:
{
"title": "Learn JS",
"userId": 4,
"completed": false
}
Response:
{
"id": 85,
"userId": 4,
"completed": false,
"title": "Learn JS",
"createdAt": "2020-07-06T14:30:32.542Z",
"updatedAt": "2020-07-06T14:30:32.542Z"
}
Atualiza uma tarefa pelo ID.
Request:
{
"completed": true
}
Response:
{
"id": 74,
"userId": 4,
"completed": true,
"title": "expedita tempore nobis eveniet laborum maiores",
"createdAt": "2020-07-06T14:30:32.542Z",
"updatedAt": "2020-07-06T14:30:32.542Z"
}
Exclui uma tarefa pelo ID.
Response:
{
"message": "No content"
}
A estrutura de pastas do projeto é a seguinte:
src
├── configs
│ └── database
│ └── prismaClient.ts
├── controllers
│ ├── CreateTodoController.ts
│ ├── DeleteTodoController.ts
│ ├── EditTodoController.ts
│ ├── GetAllTodosController.ts
│ ├── GetTodoController.ts
│ └── index.ts
├── dto
│ ├── EditTodoDTO.ts
│ ├── TodoDTO.ts
│ └── index.ts
├── entities
│ └── Todo.ts
├── errors
│ ├── AppError.ts
│ ├── errorHandler.ts
│ └── index.ts
├── middlewares
│ ├── index.ts
│ ├── verifyEditTodoFields.ts
│ ├── verifyIfIdIsANumber.ts
│ ├── verifyIfTodosExists.ts
│ └── verifyTodoFields.ts
├── repositories
│ └── todo.repository.ts
├── routes
│ └── todo.routes.ts
├── server
│ └── index.ts
├── services
│ ├── CreateTodoService.ts
│ ├── DeleteTodoService.ts
│ ├── EditTodoService.ts
│ ├── GetAllTodosService.ts
│ ├── GetTodoService.ts
│ └── index.ts
├── types
│ └── Filters.ts
└── app.ts
Se você quiser contribuir com este projeto, siga estas etapas:
- Fork o projeto
- Crie uma branch para sua feature (git checkout -b feature/AmazingFeature)
- Commit suas mudanças (git commit -m 'Add some AmazingFeature')
- Push para a branch (git push origin feature/AmazingFeature)
- Abra um Pull Request
Distribuído sob a licença MIT. Veja LICENSE aqui para mais informações.
Qualquer dúvida ou sugestão, fique à vontade para entrar em contato. Agradeço pelo interesse no projeto!