Repositório possui projeto desenvolvido no período que estive na Trybe, abordando os conceitos de RESTFul API com CRUD completo utilizando arquitetura Model-Service-Controller (MSC).
- Este é um projeto desenvolvido para me ajudar a aprender sobre
sequelize
eJWT
; - Meu primeiro projeto usando
sequelize
eJWT
; - Utilizei o Cliente Rest
Thunder Client
, como extensão, para visualizar o retorno do meu acesso.
Uma API e um banco de dados, utilizando a arquitetura MSC (model-service-controller), para a produção de conteúdo para um blog!
- Desenvolvi endpoints que estarão conectados ao banco de dados seguindo os princípios do REST;
- Para fazer um post é necessário usuário e login, portanto foi trabalhada a relação entre user e post;
- Será necessária a utilização de categorias para os posts, trabalhando, assim, a relação de posts para categories e de categories para posts.
docker-compose.yml
,config.js
e/seeders
arquivos providos pela Trybe.
Para rodar esse projeto, atente-se as variáveis de ambiente no seu .env. Existe um arquivo .env.example
com as informações para configuração.
- Clone o repo:
git clone [email protected]:Ludson96/project-blogs-api.git
- Já existe um arquivo docker-compose.yml. Bastando usar o comando docker-compose up para rodar o MySQL e o Node pelo docker. Execute os services do docker:
node
edb
docker-compose up -d
- Inicie o container node (renomeado para blogs_api):
docker exec -it blogs_api bash
- Instale as suas dependências:
npm install
- Execute o servidor:
npm start
Outra forma de executar é utilizando o nodemom
(permite fazer alteração em tempo real sem precisar derrubar o servidor e iniciá-lo novamente):
npm run debug
-
Utilizar alguma Plataforma de API para acessar os endpoints e fazer seus devidos experimentos. Exemplos: Postman e Insomnia. Ou uma extensão no VSCode, recomendo utilizar a thunder client.
-
Uso
-
utilize o comando
npm run prestart
, ele criará o banco de dados e as tabelas de acordo com o que está em/migrations
e/seeders
. -
Todas as rotas (exceto
post /login
epost /user
) requerem autenticação
Imagem disponibilizada pela Trybe
- Entrar
- O corpo deve ser o seguinte:
{
"email" : " [email protected] " ,
"senha" : " 123456 "
}
- Retorna um token se o login for concluído
- Cria um novo usuário
- O corpo deve ser o seguinte, onde:
displayName
deve ter pelo menos 8 caracteresemail
deve ter um formato válidopassword
deve ter pelo menos 6 caracteresimagem
é opcional
{
"displayName" : " John Doe " ,
"email" : " [email protected] " ,
"senha" : " 123456 " ,
"image" : " https://cdn1.iconfinder.com/data/icons/users-solid-1/30/users-solid-profile-neutral-5-512.png "
}
- Se o usuário for criado com sucesso, um token é fornecido
- Lista todos os usuários:
[
{
"id" : 1 ,
"displayName" : " Lewis Hamilton " ,
"email" : " [email protected] " ,
"image" : " https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg "
},
/* ... */
]
- Pega um parâmetro numérico, e se houver algum usuário com id correspondente, retorna:
{
"id" : 3 ,
"displayName" : " John Doe " ,
"email" : " [email protected] " ,
"image" : " https://cdn1.iconfinder.com/data/icons/users-solid-1/30/users-solid-profile-neutral-5-512.png "
}
- Exclui o usuário atual
- Se o usuário for excluído com sucesso, o status
204
é retornado
- Cria uma nova categoria
- O corpo deve ser o seguinte:
{
"name" : " Truques de mágica "
}
- Lista todas as categorias:
[
{
"id" : 1 ,
"nome" : " Animais "
},
{
"id" : 2 ,
"nome" : " Livros "
},
/* ... */
]
- Cria uma nova postagem no blog
- O corpo deve ser o seguinte:
{
"title" : " Resenha: A arte da columbofilia " ,
"content" : " Este é um ótimo livro sobre como os pombos podem ser treinados para se tornarem campeões! " ,
"categoryIds" : [ 1 , 2 ]
}
- Lista todas as postagens do blog:
[
{
"id" : 1 ,
"title" : " As melhores raças de cães para caça " ,
"content" : " Aqui estão os melhores companheiros de caça " ,
"userId" : 1 ,
"publicado" : " 2011-08-01T19:58:00.000Z " ,
"atualizado" : " 2011-08-01T19:58:51.000Z " ,
"usuário" : {
"id" : 1 ,
"displayName" : " Lewis Hamilton " ,
"email" : " [email protected] " ,
"image" : " https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg "
},
"categorias" : [
{
"id" : 1 ,
"nome" : " Animais "
}
]
},
/* ... */
]
- Pega um parâmetro numérico, e se houver algum post com um id correspondente, retorna:
{
"id" : 1 ,
"title" : " As melhores raças de cães para caça " ,
"content" : " Aqui estão os melhores companheiros de caça " ,
"userId" : 1 ,
"publicado" : " 2011-08-01T19:58:00.000Z " ,
"atualizado" : " 2011-08-01T19:58:51.000Z " ,
"usuário" : {
"id" : 1 ,
"displayName" : " Lewis Hamilton " ,
"email" : " [email protected] " ,
"image" : " https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg "
},
"categorias" : [
{
"id" : 1 ,
"nome" : " Animais "
}
]
}
- Pesquisa postagens por título ou conteúdo, por exemplo:
// GET /post/search?q=silk
[
{
"id" : 2 ,
"title" : " Ótimos livros sobre a Rota da Seda " ,
"content" : " Estes são alguns livros obrigatórios sobre a Rota da Seda " ,
"userId" : 1 ,
"publicado" : " 2011-08-01T19:58:00.000Z " ,
"atualizado" : " 2011-08-01T19:58:51.000Z " ,
"usuário" : {
"id" : 1 ,
"displayName" : " Lewis Hamilton " ,
"email" : " [email protected] " ,
"image" : " https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg "
},
"categorias" : [
{
"id" : 2 ,
"nome" : " Livros "
}
]
}
]
- Se não houver parâmetro de consulta, retorna todos os posts:
// GET /post/search?q=
[
{
"id" : 1 ,
"title" : " As melhores raças de cães para caça " ,
"content" : " Aqui estão os melhores companheiros de caça " ,
"userId" : 1 ,
"publicado" : " 2011-08-01T19:58:00.000Z " ,
"atualizado" : " 2011-08-01T19:58:51.000Z " ,
"usuário" : {
"id" : 1 ,
"displayName" : " Lewis Hamilton " ,
"email" : " [email protected] " ,
"image" : " https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg "
},
"categorias" : [
{
"id" : 1 ,
"nome" : " Cães "
}
]
},
/* ... */
]
- Edita uma postagem existente
- O corpo deve ser o seguinte, onde:
- não é possível alterar a categoria
- somente o autor pode editar a postagem
{
"title" : " Como fazer crescer as plantas da sua casa " ,
"content" : " Este é um guia passo a passo para melhorar o crescimento de plantas em ambientes internos "
}
- Exclui uma postagem existente
- Somente o autor pode deletar o post
- Se a postagem for excluída com sucesso, retorna o status
204