-
Este projeto contém minha API e banco de dados para a produção de conteúdos para um blog. Através dos endpoints é possivel fazer um login que disponibilizará um token, e também fazer um CRUD completo (Create, Read, Update e Delete) de usuários, categorias e posts.
-
O projeto foi desenvolvida para utilzar a ORM Sequelize e tokens para autentificação com JWT, uma arquitetura de software MSC (model-service-controller), Express para as rotas, utiliza um banco MySQL para a gestão de dados e Joi para validação dos dados recebidos. Além disso, a API é RESTful!
- Este projeto foi individual e foram
6
dias de projeto.
- Este projeto foi individual e foram
- Para rodar este projeto localmente você vai precisar ter instalado o Docker, GitHub, Node e um gerenciador de banco de dados, e basta seguir o passo a passo abaixo.
- Clone o repositório com o comando:
git clone git@github.com:caioBatistaDosSantos/Project-Blogs-API.git
;- Entre na pasta do repositório:
cd Project-Blogs-API
- Entre na pasta do repositório:
- Instale as dependencia com o comando:
npm install
- Suba o container Docker com o comando:
docker-compose up -d --build
- Conecte-se a um gerenciador de banco de dados com os seguintes dados:
- host='localhost',
- user='root',
- port='3306',
- password='password', (Essa conexão será nescessária para criar o banco de dados)
- Entre no terminal do container Docker com o comando:
docker exec -it blogs_api bash
- Suba o banco de dados com o comando:
npm run prestart
(este comando deve ser realizado dentro do terminal do container)
- Popule o banco de dados com o comando:
npm run seed
(este comando deve ser realizado dentro do terminal do container)
- Por fim inicie a aplicação com o comando:
npm start
(este comando deve ser realizado dentro do terminal do container)
-
O endpoint adiciona um novo usuário ao banco de dados;
-
O corpo da requisição deverá ter o seguinte formato:
{ "displayName": "Brett Wiltshire", "email": "brett@email.com", "password": "123456", "image": "http://4.bp.blogspot.com/_YA50adQ-7vQ/S1gfR_6ufpI/AAAAAAAAAAk/1ErJGgRWZDg/S45/brett.png" }
-
O campo
displayName
deverá ter no mínimo 8 caracteres. Ele é obrigatório. -
O campo
email
deverá ser um email no formato válido e não pode já estar cadastrado. Ele é obrigatório. -
O campo
password
deverá ter no mínimo 6 caracteres. Ele é obrigatório. -
O campo
image
é obrigatório. -
Caso esteja tudo certo, retorna o
status 201
e um token válido.
-
O endpoint é capaz de realizar um login;
-
O corpo da requisição deverá ter o seguinte formato:
{ "email": "lewishamilton@gmail.com", "password": "123456" }
-
Caso 'email' e 'password' estejam corretos, retorna o
status 200
e um token válido.
-
O endpoint retorna um array com todos os usuários cadastrados. Devendo retornar o
status 200
, com os dados no corpo. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
O endpoint retorna um usuário com base no id da rota. Devendo retornar o
status 200
ao fazer uma requisição com um usuário existente (ex:/user/1
), tambem retorna com os dados do usuário no corpo. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
. -
Caso não seja encontrado um produto com base no id da rota, o endpoint deve retornar o
status 404
com o seguinte corpo:{ "message": "User does not exist" }
-
O endpoint adiciona uma nova categoria ao banco de dados;
-
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
. -
O corpo da requisição deverá ter o seguinte formato:
{ "name": "Typescript", }
-
O campo
name
é obrigatório. -
Caso esteja tudo certo, retorna o
status 201
e a nova categoria no corpo.
-
O endpoint retorna um array com todas as categorias cadastradas. Devendo retornar o
status 200
, com os dados no corpo. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
O endpoint adiciona um novo post ao banco de dados;
-
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
. -
O corpo da requisição deverá ter o seguinte formato:
{ "title": "Latest updates, August 1st", "content": "The whole text for the blog post goes here in this key", "categoryIds": [1, 2] }
-
O campo
title
é obrigatório. -
O campo
content
é obrigatório. -
O campo
categoryIds
deve ser um id de uma categorias existente. Ele é obrigatório. -
Caso esteja tudo certo, retorna o
status 201
e o novo post no corpo.
-
O endpoint retorna um array com todos os posts cadastrados, com seus respectivos usuários donos e categorias. Devendo retornar o
status 200
, com os dados no corpo. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
O endpoint retorna um posst com base no id da rota, com seu respectivo usuário dono e categoria. Devendo retornar o
status 200
, com os dados no corpo. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
O endpoint atualiza post do banco de dados;
-
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
. -
O corpo da requisição deverá ter o seguinte formato:
{ "title": "Latest updates, August 1st", "content": "The whole text for the blog post goes here in this key" }
-
O campo
title
é obrigatório. -
O campo
content
é obrigatório. -
So é possível atualizar um post caso você seja dono dele.
-
Caso esteja tudo certo, retorna o
status 200
e o post atualizado no corpo.
-
O endpoint deleta um post cadastrado no banco, passado pelo id da rota. Devendo retornar o
status 204
, com o corpo vazio. -
So é possível deletar um post caso você seja dono dele.
-
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
O endpoint deleta o seu usuário do banco de dados, passado atraves do token da requisição. Devendo retornar o
status 204
, com o corpo vazio. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
O endpoint retorna um array com todos os posts cadastrados que tenham o 'searchTerm' extraído do query params em seu título ou conteúdo, com seus respectivos usuários donos e categorias. Devendo retornar o
status 200
, com os dados no corpo. -
Este endpoint nessecita de um campo
authorization
no header da requisição com um token válido gerado nos endpoints POST/user
e/login
.
-
Se Possivel, deixe seu feedback ou seu code-review! Muito Obrigado! :)🤝🛠
-
Linkedin: https://www.linkedin.com/in/caio-batista-dos-santos/
-
Gmail: drcaiosan@gmail.com