Giter Site home page Giter Site logo

ludson96 / project-blogs-api Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 344 KB

Projeto para estudo de API RestFul com Node.js usando o pacote sequelize para fazer CRUD, e JWT para autenticação

Dockerfile 0.21% JavaScript 99.79%
crud docker docker-compose express javascript jwt mysql node-js nodejs orm sequelize jwt-authentication

project-blogs-api's Introduction

Repositório do projeto Blogs API 📝

Módulo: BACK-END

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).

Informações de aprendizados

  • Este é um projeto desenvolvido para me ajudar a aprender sobre sequelize e JWT;
  • Meu primeiro projeto usando sequelize e JWT;
  • Utilizei o Cliente Rest Thunder Client, como extensão, para visualizar o retorno do meu acesso.

Linguagem usadas

JavaScript NodeJS Express MySQL Sequelize JWT Docker .ENV Nodemon ESLint

O que foi desenvolvido

Uma API e um banco de dados, utilizando a arquitetura MSC (model-service-controller), para a produção de conteúdo para um blog!

  1. Desenvolvi endpoints que estarão conectados ao banco de dados seguindo os princípios do REST;
  2. Para fazer um post é necessário usuário e login, portanto foi trabalhada a relação entre user e post;
  3. 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.

Variáveis de Ambiente

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.

Instruções para instalar e rodar

  1. Clone o repo:
  git clone [email protected]:Ludson96/project-blogs-api.git
  1. 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 e db
  docker-compose up -d
  1. Inicie o container node (renomeado para blogs_api):
  docker exec -it blogs_api bash
  1. Instale as suas dependências:
  npm install
  1. 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
  1. 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.

  2. 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 e post /user ) requerem autenticação

Diagrama

Diagrama de relacionamentos das tabelas

Imagem disponibilizada pela Trybe

Endpoints

Rota de Login

POST /login

  • Entrar
  • O corpo deve ser o seguinte:
{
  "email" : " [email protected] " ,
  "senha" : " 123456 "
}
  • Retorna um token se o login for concluído

Rota do Usuário

POST /usuário

  • Cria um novo usuário
  • O corpo deve ser o seguinte, onde:
    • displayName deve ter pelo menos 8 caracteres
    • email deve ter um formato válido
    • password deve ter pelo menos 6 caracteres
    • imagem é 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

GET /usuário

  • 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 "
  },
  /* ... */
]

GET /user/:id

  • 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 "
}

DELETE /user/me

  • Exclui o usuário atual
  • Se o usuário for excluído com sucesso, o status 204 é retornado

Categorias Rota

POST /categorias

  • Cria uma nova categoria
  • O corpo deve ser o seguinte:
{
  "name" : " Truques de mágica "
}

GET /categorias

  • Lista todas as categorias:
[
  {
      "id" : 1 ,
      "nome" : " Animais "
  },
  {
      "id" : 2 ,
      "nome" : " Livros "
  },
  /* ... */
]

Pós Rota

POST /post

  • 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 ]
}

GET /post

  • 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 "
      }
    ]
  },
  
  /* ... */
]

GET /post/:id

  • 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 "
      }
  ]
}

GET /post/search?q=:searchTerm

  • 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 "
        }
      ]
    },
    
    /* ... */
  ]

COLOQUE /post/:id

  • 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 "
}

APAGAR /post/:id

  • Exclui uma postagem existente
  • Somente o autor pode deletar o post
  • Se a postagem for excluída com sucesso, retorna o status 204

project-blogs-api's People

Contributors

ludson96 avatar trybe-tech-ops avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.