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

https://github.com/igorbrizack/blogsapi

API de gerenciamento de um Blog com arquitetura MSC.
https://github.com/igorbrizack/blogsapi

api-rest docker express-js javascript joi-validation msc nodejs orm-framework sequelize sql

Last synced: 3 months ago
JSON representation

API de gerenciamento de um Blog com arquitetura MSC.

Awesome Lists containing this project

README

          

# 📝 Projeto Blogs API

## 📄 Sobre

Foi desenvolvido uma API e um banco de dados para a produção de conteúdo para um blog, utilizando autenticadores e ORM!

## 📋 Execute o projeto em sua máquina

Clone o repositório:

```
git clone git@github.com:IgorBrizack/BlogsApi.git
```

🐋 Rodando no Docker vs Localmente

## 👉 Com Docker

**:warning: Antes de começar, seu docker-compose precisa estar na versão 1.29 ou superior. [Veja aqui](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-compose-on-ubuntu-20-04-pt) ou [na documentação](https://docs.docker.com/compose/install/) como instalá-lo. No primeiro artigo, você pode substituir onde está com `1.26.0` por `1.29.2`.**

> :information_source: Rode os serviços `node` e `db` com o comando `docker-compose up -d --build`.

- Lembre-se de parar o `mysql` se estiver usando localmente na porta padrão (`3306`), ou adapte, caso queria fazer uso da aplicação em containers;

- Esses serviços irão inicializar um container chamado `blogs_api` e outro chamado `blogs_api_db`;

- A partir daqui você pode rodar o container `blogs_api` via CLI ou abri-lo no VS Code;

> :information_source: Use o comando `docker exec -it blogs_api bash`.

- Ele te dará acesso ao terminal interativo do container criado pelo compose, que está rodando em segundo plano.

> :information_source: Instale as dependências [**Caso existam**] com `npm install`. (Instale dentro do container)

- **:warning: Atenção:** Caso opte por utilizar o Docker, **TODOS** os comandos disponíveis no `package.json` (npm start, npm test, npm run dev, ...) devem ser executados **DENTRO** do container, ou seja, no terminal que aparece após a execução do comando `docker exec` citado acima.

- **:warning: Atenção:** O **git** dentro do container não vem configurado com suas credenciais. Ou faça os commits fora do container, ou configure as suas credenciais do git dentro do container.

- **:warning: Atenção:** Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.

- ✨ **Dica:** A extensão `Remote - Containers` (que estará na seção de extensões recomendadas do VS Code) é indicada para que você possa desenvolver sua aplicação no container Docker direto no VS Code, como você faz com seus arquivos locais.

![sequelize test](./public/remote-container.png)




## 👉 Sem Docker

> :information_source: Instale as dependências [**Caso existam**] com `npm install`

- **:warning: Atenção:** Não rode o comando npm audit fix! Ele atualiza várias dependências do projeto, e essa atualização gera conflitos com o avaliador.

- **✨ Dica:** Para rodar o projeto desta forma, obrigatoriamente você deve ter o `node` instalado em seu computador.
- **✨ Dica:** O avaliador espera que a versão do `node` utilizada seja a 16.


## 👨🏻‍💻 Habilidades

- Endpoints que estão conectados com o banco de dados seguindo os princípios do REST;
- Criar uma API RESTful utilizando a arquitetura MSC (Model-Service-Controller);
- Aplicação em Node.js usando o pacote sequelize para fazer um CRUD de posts;
- Transactions: Uma transação simboliza uma unidade de trabalho indivisível executada do banco de dados de forma independente de outras transações;
- Validar dados das requisições com a biblioteca Joi.

## 🔎 Rotas

### Login

POST /login

• Se o login for feito com sucesso retorna um token para o usuário.

### User

POST /user

• Cadastra um novo usuário, permitindo apenas um email válido, gerando um token.

GET /user

• Traz todos users do banco de dados.

• Valida o token - req.authorization.

GET /user/:id

• Traz um user por id do banco de dados.

• Valida o token - req.authorization.

DELETE /user/me

• Deleta o usuário logado.

• Valida o token - req.authorization.

### Categories

POST /categories

• Cadastra uma nova categoria.

• Valida o token - req.authorization.

GET /categories

• Traz todas categorias do banco de dados.

• Valida o token - req.authorization.

### Post

POST /post

• Adiciona um novo blog ao usuário logado e vincula as categorias em suas tabelas no banco de dados.

• Valida o token - req.authorization.

GET /post

• Traz todos os blogs post e as categorias do banco de dados.

• Valida o token - req.authorization.

GET /post/:id

• Traz o blog post por ID e as categorias do banco de dados.

• Valida o token - req.authorization.

PUT /post/:id

• Atualiza o blog post por ID.

• Valida o token - req.authorization.

DELETE /post/:id

• Deleta o blog post por ID.

• Valida o token - req.authorization.

GET /post/search?q=:searchTerm

• Retornar um array de blogs post que contém em seu título ou conteúdo o termo passado na URL.

• Valida o token - req.authorization.

## 🛠️ Ferramentas & Metodologias Utilizadas

- [Node.js](https://nodejs.org/en/);
- [Express.js](https://expressjs.com/);
- [MYSQL](https://www.mysql.com/);
- [mysql2](https://www.npmjs.com/package/mysql2);
- [Sequelize(ORM)](https://sequelize.org/);
- [JWT(Autenticação)](https://jwt.io/);
- [Joi](https://joi.dev/api/?v=17.6.0);
- [Docker](https://www.docker.com/);
- JavaScript ES6+;

---
⌨️ desenvolvido por [Igor Brizack](https://www.linkedin.com/in/igor-brizack/) 😄