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.
- Host: GitHub
- URL: https://github.com/igorbrizack/blogsapi
- Owner: IgorBrizack
- Created: 2022-09-27T17:28:31.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-09-28T15:02:08.000Z (almost 4 years ago)
- Last Synced: 2026-01-03T14:26:24.063Z (6 months ago)
- Topics: api-rest, docker, express-js, javascript, joi-validation, msc, nodejs, orm-framework, sequelize, sql
- Language: JavaScript
- Homepage:
- Size: 263 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
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.

## 👉 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/) 😄