Skip to content

Blogs API é um projeto focado em desenvolver uma API e um banco de dados para a produção de conteúdo para um blog.

Notifications You must be signed in to change notification settings

MilenaSuzumura/project-blogs-api

Repository files navigation

Blogs API

Blogs API é um projeto focado em desenvolver uma API e um banco de dados para a produção de conteúdo para um blog.

OBS: ESSE PROJETO FOI DESENVOLVIDO NA TRYBE.

Técnologias usadas

  • JavaScript;
  • Node.js;
  • Express.js;
  • Sequelize.js;
  • Json web tokens;
  • DotEnv;
  • Joi;
  • Docker;
  • MySQL;
  • Jest;
  • Mock;
  • Sinon;
  • Chai;
  • Chai-http.

Rotas, entradas e saídas

Endpoint POST /login
Utilizado para quando o usuário vai acessar sua conta. O banco de dados exige que o usuário insira o email e senha correta e irá retornar um token temporário como confirmação de que está correto.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-post-login
Exemplo de saída:
imagem-exemplo-de-saída-correta-post-login

Inserindo informações incorretas

Existem dois cenários onde a saída acima pode não ser retornada: caso o email ou/e senha estejam incorretas e caso falte uma das duas informações. Ambas possuem retornos diferentes.

Retorno para email ou/e senha incorretas:

{
  "message": "Invalid fields"
}

Retorno para caso falte alguma das duas informações:

{
  "message": "Some required fields are missing"
}
Endpoint POST /user
Utilizado para criar um novo usuário. Para isso, necessita de um nome, email, senha e uma imagem. Assim como o login, retornará um token caso todas as informações enviadas foram validadas corretamente.
Informações necessárias:
  • displayName: É o nome e sobrenome. Deve ser enviado como string e o mínimo de caracters é 8. É obrigatório.
  • email: É o email e deve ser enviado como string. É obrigatório.
  • password: É a senha. Deve ser enviado como string e deve conter no mínimo 6 caracter. É obrigatório.
  • image: É uma imagem ou foto de usuário e deve ser enviado como string. Esse é o único que não é obrigatório.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-post-user
Exemplo de saída:
imagem-exemplo-de-saída-correta-post-user

Inserindo informações incorretas

Existem dois cenários onde a saída acima pode não ser retornada: caso não preencha os requisitos necessários(explicados nas Informações Necessárias acima) e caso falte alguma das informações obrigatórias. Cada um deles terá uma mensagem diferente avisando o motivo de estar incorreta.

Exemplo caso não preencha os requisitos necessários:

{
  "message": "\"password\" length must be at least 6 characters long"
}

Exemplo caso esteja faltando alguma das informações obrigatórias

{
  "message": "\"password\" is required"
}
Endpoint GET /user
Utilizado para retornar as informações de todos os usuários que contém no banco de dados, porém é necessário ter um token para isso.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-get-user
Exemplo de saída:
imagem-exemplo-de-saida-correta-get-user

Inserindo informações incorretas

Existem duas formas para o banco de dados não ser acessado. Não contendo um token ou tendo um token inválido.

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}
Endpoint GET /user/:id
Utilizado para retornar as informações do usuário com o id que está no url que contém no banco de dados, porém é necessário ter um token para isso.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-get-user-id
Exemplo de saída:
imagem-exemplo-de-saida-correta-get-user-id

Caso não exista usuário com aquele id no banco de dados, o retorno será:

{
  "message": "User does not exist"
}

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}
Endpoint POST /categories
Utilizado para criar uma nova categoria. Para isso, necessita de um nome e de um token valido. Caso as informações estejam corretas, retornara as informações da nova categoria.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-post-categories
Exemplo de saída:
imagem-exemplo-de-saida-correta-post-categories

Inserindo informações incorretas

Existem quatro cenários onde a saída acima pode não ser retornada: não conter o nome da categoria, a string name estar vazia, caso não tenha o token e um token invalido.

Exemplo caso não contenha o name:

{
  "message": "\"name\" is required"
}

Exemplo caso name seja uma string vazia:

{
  "message": "\"name\" is not allowed to be empty"
}

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}
Endpoint GET /categories
Utilizado para retornar as informações de todas as categorias que contém no banco de dados, porém é necessário ter um token para isso.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-get-categories
Exemplo de saída:
imagem-exemplo-de-saida-correta-get-categories

Inserindo informações incorretas

Existem dois cenários onde a saída acima pode não ser retornada: caso não tenha o token e um token invalido.

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}
Endpoint POST /post
Utilizado para criar um novo post. Para isso, necessita de um nome, email, senha e uma imagem. Assim como o login, retornará um token caso todas as informações enviadas foram validadas corretamente.
Informações necessárias:
  • title: É o título do post e deve ser enviado como string. É obrigatório.
  • content: É o conteúdo do post e deve ser enviado como string. É obrigatório.
  • categoryIds: É um array de números com as categorias ao qual o post pertence e precisa ter pelo menos 1 id de categoria. É obrigatório.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-post-post
Exemplo de saída:
imagem-exemplo-de-saida-correta-post-post

Inserindo informações incorretas

Existem dois cenários onde a saída acima pode não ser retornada: caso não preencha os requisitos necessários(explicados nas Informações Necessárias acima) e caso falte alguma das informações obrigatórias. Cada um deles terá uma mensagem diferente avisando o motivo de estar incorreta.

Exemplo caso não preencha os requisitos necessários:

{
  "message": "Some required fields are missing"
}

Exemplo caso esteja faltando alguma das informações obrigatórias

{
  "message": "\"content\" is required"
}
Além disso, pode ter os erros do token.

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}
Endpoint GET /post
Utilizado para retornar as informações de todas as postagens que contém no banco de dados, porém é necessário ter um token para isso.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-get-post
Exemplo de saída:
imagem-exemplo-de-saida-correta-get-post

Inserindo informações incorretas

Existem dois cenários onde a saída acima pode não ser retornada: caso não tenha o token e um token invalido.

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}
Endpoint GET /post/:id
Utilizado para retornar as informações das postagens com o id que está no url que contém no banco de dados, porém é necessário ter um token para isso.
Exemplo de entrada:
imagem-exemplo-de-entrada-correta-get-post-id
Exemplo de saída:
imagem-exemplo-de-saida-correta-get-post-id

Inserindo informações incorretas

Existem três cenários onde a saída acima pode não ser retornada: caso não exista post com aquele id, não tenha o token e um token invalido.

Caso não exista post com aquele no banco de dados, o retorno será:

{
  "message": "Post does not exist"
}

Exemplo caso não contenha o token:

{
  "message": "Token not found"
}

Exemplo caso o token tenha expirado ou seja inválido:

{
  "message": "Expired or invalid token"
}

OBS: Existe o Endpoint GET /search, porém não funciona.

Utilizando o docker

Para criar os containers, execute: docker-compose up -d

Para abrir o terminar do container, execute: docker exec -it blogs_api bash

Instalando Dependências

npm install

Banco de dados

Para criar o banco de dados, execute: npm run prestart

Para popular o banco de dados: npm run seed

Aplicação Node:

Para executar a aplicação e acessar as rotas, execute: npm run debug

Executando Testes

Para rodar todos os testes:

npm test

OBS: Os testes irão rodar com os testes de cobertura