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

https://github.com/tonyycruz/blogs_api

Neste projeto, foram desenvolvidos uma API e um banco de dados para a produção de conteúdo para um blog
https://github.com/tonyycruz/blogs_api

commit-conventions express joi jwt mysql mysql2 nodejs sequelize

Last synced: 2 months ago
JSON representation

Neste projeto, foram desenvolvidos uma API e um banco de dados para a produção de conteúdo para um blog

Awesome Lists containing this project

README

          

Projeto Blogs Api


Neste projeto, foram desenvolvidos uma API e um banco de dados para a produção de conteúdo para um blog.

---


Diagrama DER (Diagrama de Entidade-Relacionamento)

---


📃 Sobre o Projeto

Foi desenvolvida uma aplicação em Node.js usando o pacote sequelize para fazer um CRUD de posts. Os endpoints foram ligados ao banco de dados seguindo os princípios do REST.
Para criar posts, o usuario deve estar cadastrado e logad sendo validado por um token gerado atravez do JWT(json web token).


Rotas utilizáveis

Ver rotas


- POST `/user` para cadastrar novo usuario. Utilize um body nesse formato:

```jsx
{
"displayName": "Monkey D. Luffy",
"email": "luffy@pirateking.com",
"password": "estoucomfome",
"image": "https://img.assinaja.com/upl/lojas/mundosinfinitos/imagens/foto-one-piece.png"
}
```

---

- POST `/login` para fazer login e receber um token. Utilize um body nesse formato:

```jsx
{
"email": "luffy@pirateking.com",
"password": "estoucomfome"
}
```

---

- POST `/post` para criar uma nova postagem. Utilize um body nesse formato:

```jsx
{
"title": "Serei o rei dos piratas",
"content": "Vou encontrar todos os pegaços",
"categoryIds": [1]
}
```

---

- POST `/categories` para adicionar uma nova categoria. Utilize um body nesse formato:

```jsx
{
"name": "Animation"
}
```

---

- GET `/user` traz todos os usuarios.

---

- GET `/user/:id` traz o usuário de acordo com o id no banco de dados se ele existir.

---

- GET `/categories` para buscar todas as categorias.

---

- GET `/post` para trazer todos os blogs post.

---

- GET `/post/:id` para trazer o blog post baseado no id do banco de dados se ele existir.

---

- GET `/post/search?q=` retornar um array de post que contenham em seu título ou conteúdo o termo passado na URL. Exemplo de url:

```jsx
http://localhost:/post/search?q=comida
```

---

- PUT `/post/:id` para atualizar o poste caso ele exista e pertença ao usuario logado. Utilize um body nesse formato:

```jsx
{
"title": "Lufeeeee",
"content": "Cade minha comida"
}
```

---

- PUT `/sales/:id` para atualizar a venda. Utilize um body nesse formato:

```jsx
[
{
"productId": 1,
"quantity":2
},
]
```

---

- DELETE `/post/:id` deleta um blog post de acordo com o id caso a pessoa seja dona dele.

---

- DELETE `/user/me` encontra o usuario logado travez do token de validação e o deleta.


---

### 🛠 Tecnologias e Bibliotecas utilizadas no desenvolvimento do projeto

- **[Node.js](https://nodejs.org/en/)**

- **[MySQL](https://www.mysql.com/products/workbench/)**

- **[Mysql2](https://www.npmjs.com/package/mysql2)**

- **[Express](http://expressjs.com/pt-br/)**

- **[Nodemon](https://www.npmjs.com/package/nodemon)**

- **[Sequelize](https://sequelize.org/)**

- **[JWT](https://jwt.io/introduction)**

- **[Joi](https://www.npmjs.com/package/joi)**

---

### 🚀 Como executar o projeto

_Pré-requisitos_

Antes de começar, você vai precisar ter instalado em sua máquina as seguintes ferramentas:
- [Git](https://git-scm.com)
- [Node.js](https://nodejs.org/en/)
- [Mysql](https://www.mysql.com/) para rodar local ou [Docker](https://docs.docker.com/get-docker/) para rodar em container.

É recomendado utilizar algum cliente HTTP, como [Postman](https://www.postman.com/) ou o [Insomnia](https://insomnia.rest/download).

Também é bom ter um editor para trabalhar com o código como [VSCode](https://code.visualstudio.com/)

---

_Clone o repositorio_

```jsx
git clone git@github.com:TonyyCruz/blogs_api.git
```

---

:whale: Rodando no Docker


## Com Docker


_Rode o serviço `node` com o comando_

```jsx
docker-compose up -d
```

- Esse serviço irá inicializar dois containers chamados `blogs_api` e outro chamado `blogs_api_db`.
- A partir daqui você pode rodar o container via CLI ou abri-lo no VS Code.

_Via CLI use o comando_
```jsx
docker exec -it blogs_api bash
```
- Ele te dará acesso ao terminal interativo do container blogs_api(node) criado pelo compose, que está rodando em segundo plano.

_Instale as dependências `dentro do container` com_

```jsx
npm install
```

⚠️Atenção: Caso opte por utilizar o Docker, TODOS os scripts disponíveis no package.json devem ser executados DENTRO do container, ou seja, no terminal que aparece após a execução do comando docker exec.



---

:computer: Rodando Localmente


_Instale as dependências com o comando_

```jsx
npm install
```
- Para rodar o projeto desta forma, **obrigatoriamente** você deve ter o `node` instalado em seu computador.
- Recomenda-se a versão `^16`

⚠️Atenção: Não esqueça de renomear/configurar o arquivo .env.example

---

### 💡 Scripts prontos

Scripts

- Criar o banco de dados e gerar as tabelas:
```sh
npm run prestart
```

- Limpar e popular o banco de dados:
```sh
npm run seed
```

- Iniciar o servidor Node:
```sh
npm start
```

- Iniciar o servidor Node com nodemon:
```sh
npm run debug
```


---