https://github.com/jonathanprojetos/blogs-api
Nesta aplicação foi desenvolvido uma API e um banco de dados, com intuito de produzir conteúdo para um blog.
https://github.com/jonathanprojetos/blogs-api
dotenv eslint express express-async-errors joi jsonwebtoken mysql mysql2 nodejs nodemon sequelize sequelize-cli
Last synced: 10 months ago
JSON representation
Nesta aplicação foi desenvolvido uma API e um banco de dados, com intuito de produzir conteúdo para um blog.
- Host: GitHub
- URL: https://github.com/jonathanprojetos/blogs-api
- Owner: JonathanProjetos
- Created: 2022-09-04T12:27:41.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2022-10-08T14:57:57.000Z (over 3 years ago)
- Last Synced: 2025-02-05T07:29:02.807Z (12 months ago)
- Topics: dotenv, eslint, express, express-async-errors, joi, jsonwebtoken, mysql, mysql2, nodejs, nodemon, sequelize, sequelize-cli
- Language: JavaScript
- Homepage:
- Size: 290 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Blogs-Api
# Contexto
Nesta aplicação foi desenvolvido uma API e um banco de dados, com intuito de produzir conteúdo para um blog. A aplicação segue os princípios REST. Para acessar os endereços da aplicação, é necessário fazer autenticação e quando autenticado a API responderá trazendo um token no corpo da requisição. O token deverá ser inserido no cabeçalho de cada requisição privada, com o intuito de autenticação. A arquitetura da aplicação se baseia em relações entre usuário por postagem e de postagem por categorias. Dentro do projeto existe um diagrama exemplificando estas ligações.
## Importante:
- E aconselhável o uso de softwares de envio de requisições REST como:
- [Insomia](https://insomnia.rest/)
- [Postman](https://www.postman.com/)
- [Httpie](https://httpie.io/)
## Detalhes das rotas
#### Verbo Post : /login
##### Esperado
- O corpo da requisição deverá seguir o formato abaixo:
```json
{
"email": "lewishamilton@gmail.com",
"password": "123456"
}
```
- Se o login foi feito com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWls
LmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
```
#### Verbo Post : /user
##### Esperado
- O corpo da requisição deverá seguir o formato abaixo:
```json
{
"displayName": "Brett Wiltshire",
"email": "brett@email.com",
"password": "123456",
"image": "http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png"
}
```
- Se o user for criado com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 201:
```json
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJwYXlsb2FkIjp7ImlkIjo1LCJkaXNwbGF5TmFtZSI6InVzdWFyaW8gZGUgdGVzdGUiLCJlbWFpbCI6InRlc3RlQGVtYWls
LmNvbSIsImltYWdlIjoibnVsbCJ9LCJpYXQiOjE2MjAyNDQxODcsImV4cCI6MTYyMDY3NjE4N30.Roc4byj6mYakYqd9LTCozU1hd9k_Vw5IWKGL4hcCVG8"
}
```
#### Verbo Get : /user
##### Esperado
- Ao listar usuários com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200.
```json
[
{
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
},
/* ... */
]
```
#### Verbo Get : /user/:id
##### Esperado
- Ao listar um usuário com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:
> exemplo id: 1
```json
{
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
}
```
#### Verbo Post : /categories
##### Esperado
- O corpo da requisição deverá seguir o formato abaixo:
```json
{
"name": "Blogs"
}
```
#### Verbo Get : /categories
##### Esperado
- O endpoint traz todas as caretorias existentes no banco.
```json
[
{
"id": 1,
"name": "Inovação"
},
{
"id": 2,
"name": "Escola"
},
/* ... */
]
```
#### Verbo Post : /post
##### Esperado
- O endpoint deve ser capaz de adicionar um novo blog post e vinculá-lo às categorias em suas tabelas no banco de dados.
- O corpo da requisição deverá seguir o formato abaixo:
```json
{
"title": "guia",
"content": "A todo momento procuramos maneiras de diversificar nossas postagens",
"categoryIds": [1, 2]
}
```
#### Verbo Get : /post
##### Esperado
- Ao listar posts com sucesso o resultado retornado deverá ser conforme exibido abaixo, com um status http 200:
```json
[
{
"id": 1,
"title": "Post do Ano",
"content": "Melhor post do ano",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
},
"categories": [
{
"id": 1,
"name": "Inovação"
}
]
},
/* ... */
]
```
#### Verbo Get : /post/:id
##### Esperado
- O endpoint deve ser capaz de trazer o blog post baseado no id do banco de dados se ele existir;
> exemplo id: 1
```json
{
"id": 1,
"title": "Post do Ano",
"content": "Melhor post do ano",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
},
"categories": [
{
"id": 1,
"name": "Inovação"
}
]
}
```
#### Verbo Put : /post/:id
##### Esperado
- O endpoint deve ser capaz de alterar um post do banco de dados, se ele existir;
- O corpo da requisição deverá seguir o formato abaixo:
> exemplo id: 1
```json
{
"title": "Novidade",
"content": "Aqui sempre fez história"
}
```
#### Verbo Delete : /post/:id
##### Esperado
- O endpoint deve ser capaz de deletar um blog post baseado no id do banco de dados se ele existir;
> exemplo id: 1
- Se o blog post for deletado com sucesso não deve ser retornada nenhuma resposta, apenas um status http 204:
#### Verbo Delete http://localhost:3000/user/me
##### Esperado
- O endpoint deve ser capaz de deletar você do banco de dados.
- Se o user for deletado com sucesso não deve ser retornada nenhuma resposta, apenas um status http 204.
#### Verbo Get : /post/search?q=searchTerm
##### Esperado
- O endpoint deve ser capaz de trazer os blogs post baseados no q do banco de dados, se ele existir.
- O query params da requisição deverá seguir o formato abaixo:
```json
http://localhost:PORT/post/search?q=vamos
```
- Se a buscar for pelo title o resultado retornado deverá ser conforme exibido abaixo, com um status http 200.
```json
// GET /post/search?q=Vamos que vamos
[
{
"id": 2,
"title": "Vamos que vamos",
"content": "Foguete não tem ré",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
},
"categories": [
{
"id": 2,
"name": "Escola"
}
]
}
]
```
- Se a buscar for pelo content o resultado retornado deverá ser conforme exibido abaixo, com um status http 200.
```json
// GET /post/search?q=Foguete não tem ré
[
{
"id": 2,
"title": "Vamos que vamos",
"content": "Foguete não tem ré",
"userId": 1,
"published": "2011-08-01T19:58:00.000Z",
"updated": "2011-08-01T19:58:51.000Z",
"user": {
"id": 1,
"displayName": "Lewis Hamilton",
"email": "lewishamilton@gmail.com",
"image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
},
"categories": [
{
"id": 2,
"name": "Escola"
}
]
}
]
```
## Técnologias usadas
> Desenvolvido em nodejs.
> ORM : Sequelize
> Framework utilizado: Express.
> Libs: nodemon, eslint, express-async-errors, dotenv, joi, jsonwebtoken, mysql2, sequelize-cli
## Instalando Dependências
## Docker
```
cd Blogs-Api/
docker-compose up -d
docker exec -it blogs_api bash
npm install
npm start
```
## Sem o docker
```
cd Blogs-Api/src/
npm install
npm start
```
## Comandos auxiliares
```bash
cd Blogs-Api/src/
npm run drop "dropa a tabela"
npm run seed "Alimenta a tabela com dados pré-definidos"
```
## Aviso Importante
Caso queira roda a aplicação via docker deverá ter o docker instalado no dispositivo, caso não esteja instalado você pode encontra como instalar neste [link](https://docs.docker.com/engine/install/ubuntu/) site oficial