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.
- JavaScript;
- Node.js;
- Express.js;
- Sequelize.js;
- Json web tokens;
- DotEnv;
- Joi;
- Docker;
- MySQL;
- Jest;
- Mock;
- Sinon;
- Chai;
- Chai-http.
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.
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.
- 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.
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.
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.
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.
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.
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.
- 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.
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"
}
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.
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.
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.
Para criar os containers, execute: docker-compose up -d
Para abrir o terminar do container, execute: docker exec -it blogs_api bash
npm install
Para criar o banco de dados, execute: npm run prestart
Para popular o banco de dados: npm run seed
Para executar a aplicação e acessar as rotas, execute: npm run debug
Para rodar todos os testes:
npm test
OBS: Os testes irão rodar com os testes de cobertura