GithubHelp home page GithubHelp logo

blogs-api's Introduction

API de Blog

O objetivo deste projeto é construir uma API e um banco de dados para a produção de conteúdo para um blog. Seguindo os principios de REST e utilizando o pacote sequelize para fazer um CRUD de posts.

Tecnologias

  • Node: ^16.0.0
  • Express: 4.17.1
  • Sequelize: 6.3.4
  • Mysql2: 2.1.0
  • Jsonwebtoken: ^8.5.1

Rode Localmente

Clone o projeto - utilizando SSH, para baixar com HTTPS é necessário utilizar outro link

  git clone [email protected]:leoblima/blogs-api.git

Vá ao diretório do projeto

  cd blogs-api

Instale as dependências

  npm install

Inicie o servidor

  npm start

Se você quiser utilizar os dados que já estão nos arquivos de seeders, então antes de inicializar rode o seguinte comando:

  npm run prestart

Como você pode conferir no package.json, o banco de dados será criado e os dados serão migrados para lá. No package.json, você pode ver outras funcionalidades que estão disponíveis pelo npm. Elas foram feitas pela Trybe.

Rodando com Docker

O projeto conta com um docker-compose pronto para fazer os containers da aplicação, tanto o do banco de dados quanto do backend. Esse arquivo foi fornecido pela Trybe.

O banco de dados está utilizando as imagem mysql na versão 8.0.21 e está rodando na porta standard 3306 e o backend está utilizando a imagem node na versão 16, como está descrito nas tecnologias.

  cd blogs-api 
  docker-compose up -d --build

Caso queira usar os comandos disponíveis no package.json, como o npm start, use:

  docker exec -it blogs_api bash

Isso vai te dar acesso ao terminal dentro do container e vai poder usar normalmente todos os comandos npm.

Referência para a API

Faz o login

  POST /login

O endpoint deve receber no body da requisição a seguinte estrutura:

{
  "email": "string",
  "password": "string"
}

Algumas validações vão ser feitas:

  • todos os campos devem estar preenchidos;
  • o usuário deve existir no banco de dados;

Caso o login seja feito com sucesso, passando pelas validações das regras de negócio, retorna um objeto com o token:

{
  "token": "string - resultado do jsonwebtoken"
}

Adiciona novo usuário

  POST /user

O endpoint deve receber no body da requisição a seguinte estrutura:

{
  "displayName": "string",
  "email": "string",
  "password": "string",
  "image": "string"
}

Algumas validações vão ser feitas:

  • displayName tem que ter no mínimo 8 caracteres;
  • email deve ter o formato válido de email;
  • password tem que ter no mínimo 6 caracteres;
  • o email não pode já existir no banco de dados;

Caso o usuário seja cadastrado com sucesso, passando pelas validações das regras de negócio, retorna um objeto com o token:

{
  "token": "string - resultado do jsonwebtoken"
}

Lista os usuários

  GET /user

Este endpoint pede que seja enviado no header, como authorization, um token válido.

Caso o token seja válido, é retornado um array com os usuários, sem a senha presente. Como no exemplo:

[
  {
      "id": 1,
      "displayName": "Lewis Hamilton",
      "email": "[email protected]",
      "image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
  },

  /* ... */
]

Lista um usuário pelo id

  GET /user/:id

Este endpoint pede que seja enviado no header, como authorization, um token válido.

Caso o token seja válido e o usuário com id requisitado exista, é retornado um objeto com o usuário, sem a senha presente. Como no exemplo:

  {
      "id": 1,
      "displayName": "Lewis Hamilton",
      "email": "[email protected]",
      "image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
  }

Adiciona uma categoria

  POST /categories

Este endpoint pede que seja enviado no header, como authorization, um token válido e a seguinte estrutura no corpo da requisição:

{
  "name": "string",
}

Caso o token seja válido e o corpo também, retorna um objeto como no exemplo:

  {
      "id": 3,
      "name": "C++",
  }

Lista as categorias

  GET /categories

Este endpoint pede que seja enviado no header, como authorization, um token válido.

Caso o token seja válido, é retornado um array com as categorias. Como no exemplo:

[
  {
      "id": 1,
      "name": "Programação"
  },
  {
      "id": 2,
      "name": "Música"
  },

  /* ... */
]

Adiciona um post

  POST /post

Este endpoint pede que seja enviado no header, como authorization, um token válido e a seguinte estrutura no corpo da requisição:

{
  "title": "string",
  "content": "string",
  "categoryIds": [1, 2] //array de números
}

Algumas validações vão ser feitas:

  • Todos os campos devem estar preenchidos;
  • Não pode haver ter ids ide categorias que não existem;

Caso o token seja válido e o corpo também, retorna um objeto como no exemplo:

{
  "id": 5,
  "title": "O input",
  "content": "The whole text for the blog post goes here in this key",
  "userId": 1,
  "updated": "2022-06-18T18:00:01.196Z",
  "published": "2022-06-18T18:00:01.196Z"
}

Lista os posts

  GET /post

Este endpoint pede que seja enviado no header, como authorization, um token válido.

Caso o token seja válido, é retornado um array com os posts. Como no exemplo:

[
  {
    "id": 1,
    "title": "Post do Ano",
    "content": "Melhor post do ano",
    "userId": 1,
    "published": "2011-08-01T19:58:00.000Z",
    "updated": "2011-08-01T19:58:51.000Z",
    "user": {
      "id": 1,
      "displayName": "Lewis Hamilton",
      "email": "[email protected]",
      "image": "https://upload.wikimedia.org/wikipedia/commons/1/18/Lewis_Hamilton_2016_Malaysia_2.jpg"
    },
    "categories": [
      {
        "id": 1,
        "name": "Inovação"
      }
    ]
  },
  
  /* ... */
]

blogs-api's People

Contributors

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