An open API service indexing awesome lists of open source software.

https://github.com/brenonsc/todos-api

Repositório criado para armazenar API em Node.js, para uma To-Do List.
https://github.com/brenonsc/todos-api

bcrypt express-js jwt-authentication node-js postgresql sequelize-orm swagger

Last synced: 9 days ago
JSON representation

Repositório criado para armazenar API em Node.js, para uma To-Do List.

Awesome Lists containing this project

README

          

# To-Dos API  :white_check_mark:

![License](https://badgen.net/badge/License/MIT/purple?icon=)
![Node.js](https://badgen.net/badge/Node.js/v22/green?icon=)
![Docker](https://badgen.net/badge/icon/Available?icon=docker&label)

Esta é uma API RESTful para gerenciar tarefas de usuários. Permite que os usuários autentiquem, criem, atualizem, deletem e listem tarefas.


## Tecnologias utilizadas  🔨


node     
express    
sequelize     
jsonwebtoken     
postgresql  
swagger
docker


## Instalação  🖥️

1. **Clone o repositório:**

```sh
git clone https://github.com/brenonsc/todos-api.git
cd todos-api
```

2. **Copie o arquivo `.env.example` para `.env` e mude as variáveis de ambiente caso sinta necessidade:**

```sh
cp .env.example .env
```

3. **Certifique-se de que o Docker está instalado na sua máquina.**

Caso não tenha, faça o download em: [Docker Desktop](https://www.docker.com/products/docker-desktop/).

4. **Execute a aplicação:**

```sh
docker compose up --build
```


## Documentação  :arrow_forward:

A API está documentada em Swagger, e pode ser acessada em `http://localhost:3000/apidocs`.


## Endpoints  :hash:

### Auth

- **POST /login**

- Resumo: Autenticar um usuário.

- Corpo da Solicitação:

```json
{
"email": "john@email.com",
"password": "p@ssw0rd"
}
```

- Respostas:

- 200: Usuário autenticado com sucesso.
- 400: Solicitação inválida.
- 401: Email ou senha inválidos.
- 500: Erro interno do servidor.

- **POST /logout**

- Resumo: Deslogar um usuário.
- Respostas:
- 204: Usuário deslogado com sucesso.
- 401: Usuário não logado.
- 500: Erro interno do servidor.

### Users

- **POST /users**

- Resumo: Criar um novo usuário.

- Corpo da Solicitação:

```json
{
"name": "John Doe",
"email": "john@email.com",
"password": "p@ssw0rd"
}
```

- Respostas:

- 201: Usuário criado com sucesso.
- 400: Solicitação inválida.
- 500: Erro interno do servidor.

- **GET /users/me**

- Resumo: Obter informações do usuário logado.
- Respostas:
- 200: Usuário obtido com sucesso.
- 404: Usuário não encontrado.
- 500: Erro interno do servidor.

- **PUT /users/{id}**

- Resumo: Atualizar um usuário.

- Corpo da Solicitação:

```json
{
"name": "Jane Doe",
"email": "jane@email.com",
"password": "p@ssw0rd"
}
```

- Respostas:

- 200: Usuário atualizado com sucesso.
- 400: Solicitação inválida.
- 401: Usuário não logado.
- 403: Usuário não autorizado.
- 404: Usuário não encontrado.
- 500: Erro interno do servidor.

- **DELETE /users/{id}**

- Resumo: Deletar um usuário.
- Respostas:
- 204: Usuário deletado com sucesso.
- 401: Usuário não logado.
- 403: Usuário não autorizado.
- 404: Usuário não encontrado.
- 500: Erro interno do servidor.

### Todos

- **GET /todos**

- Resumo: Listar todas as tarefas do usuário.
- Respostas:
- 200: Tarefas listadas com sucesso.
- 401: Usuário não logado.
- 500: Erro interno do servidor.

- **POST /todos**

- Resumo: Criar uma nova tarefa.

- Corpo da Solicitação:

```json
{
"title": "Swagger",
"description": "Configurar Swagger na aplicação.",
"status": "Pendente"
}
```

- Respostas:

- 201: Tarefa criada com sucesso.
- 401: Usuário não logado.
- 500: Erro interno do servidor.

- **GET /todos/{id}**

- Resumo: Obter uma tarefa específica do usuário.
- Respostas:
- 200: Tarefa obtida com sucesso.
- 401: Usuário não logado.
- 404: Tarefa não encontrada ou não pertence ao usuário.
- 500: Erro interno do servidor.

- **PUT /todos/{id}**

- Resumo: Atualizar uma tarefa.

- Corpo da Solicitação:

```json
{
"title": "Swagger",
"description": "Configurar Swagger na aplicação.",
"status": "Concluído"
}
```

- Respostas:

- 200: Tarefa atualizada com sucesso.
- 401: Usuário não logado.
- 404: Tarefa não encontrada ou não pertence ao usuário.
- 500: Erro interno do servidor.

- **DELETE /todos/{id}**

- Resumo: Deletar uma tarefa.
- Respostas:
- 204: Tarefa deletada com sucesso.
- 401: Usuário não logado.
- 404: Tarefa não encontrada ou não pertence ao usuário.
- 500: Erro interno do servidor.


## Estrutura do projeto  :open_file_folder:

``` bash
src
|-- config
| |-- blacklist.js
| |-- database.js
|-- controllers
| |-- AuthController.js
| |-- TodoController.js
| |-- UserController.js
|-- database
| |-- migrations
| | |-- 20250215164210-create-todos.js
| | |-- 20250215204534-create-users.js
| | |-- 20250215220755-add-user-id-to-todos.js
|-- middleware
| |-- auth.js
|-- models
| |-- index.js
| |-- todos.js
| |-- users.js
|-- app.js
|-- routes.js
|-- server.js
.env.example
.gitignore
.sequelizerc
Dockerfile
docker-compose.yaml
LICENSE
package-lock.json
package.json
README.md
swagger.json
yarn.lock
```


## Motivação de uso de ferramentas  🧰

### Docker  🐳

A utilização do **Docker** concentra vários benefícios, como a facilidade de implantação, de forma que a aplicação funcione da mesma maneira em máquinas diferentes e a padronização do ambiente de desenvolvimento, possibilitando criar containers independentes e isolados.

### Sequelize  :diamond_shape_with_a_dot_inside:

**Sequelize** é um ORM (Object-Relational Mapping) para Node.js que facilita o trabalho com bancos de dados SQL. Ele suporta a criação de migrações, o que ajuda a manter o esquema do banco de dados com controle de versão. Além disso, o **Sequelize** simplifica a manipulação de dados com uma API intuitiva, reduzindo a quantidade de código SQL necessário.


## Licença  📋

Este software está licenciado sob a [Licença MIT](https://github.com/brenonsc/todos-api/blob/main/LICENSE).