Foi desenvolvido uma API e um banco de dados para a produção de conteúdo para um blog!
Clone o repositório:
git clone git@github.com:Jayromberg/project-blogs-api.git
🐋 Rodando no Docker vs Localmente
1.26.0
por 1.29.2
.
ℹ️ Rode os serviços
node
edb
com o comandodocker-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 chamadoblogs_api_db
; -
A partir daqui você pode rodar o container
blogs_api
via CLI ou abri-lo no VS Code;
ℹ️ 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.
ℹ️ Instale as dependências [Caso existam] com
npm install
. (Instale dentro do container)
-
⚠️ Atenção: Caso opte por utilizar o Docker, TODOS os comandos disponíveis nopackage.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 comandodocker exec
citado acima. -
⚠️ 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. -
⚠️ 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.
ℹ️ Instale as dependências [Caso existam] com
npm install
-
⚠️ 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.
- 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.
POST /login
• Se o login for feito com sucesso retorna um token para o usuário.
• O endpoint deve receber a seguinte estrutura, exemplo:
{
"email": "lewishamilton@gmail.com",
"password": "123456"
}
POST /user
• Cadastra um novo usuário, permitindo apenas um email válido, gerando um token.
• O endpoint deve receber a seguinte estrutura, exemplo:
{
"displayName": "Brett Wiltshire",
"email": "brett@email.com",
"password": "123456",
"image": "http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png"
// a imagem não é obrigatória
}
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.
POST /categories
• Cadastra uma nova categoria.
• Valida o token - req.authorization.
• O endpoint deve receber a seguinte estrutura, exemplo:
{
"name": "Typescript"
}
GET /categories
• Traz todas categorias do banco de dados.
• Valida o token - req.authorization.
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.
• O endpoint deve receber a seguinte estrutura, exemplo:
{
"title": "Latest updates, August 1st",
"content": "The whole text for the blog post goes here in this key",
"categoryIds": [1, 2]
}
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.
- Node.js;
- Express.js;
- MYSQL;
- mysql2;
- Sequelize(ORM);
- JWT(Autenticação);
- Joi;
- Passport;
- Docker;
- JavaScript ES6+;
⌨️ desenvolvido por Jayromberg Lima Santos 😄
⭐️ README de referência: João Pedro Oliveira