Giter Club home page Giter Club logo

capstone-nodejs-m4's Introduction

<<<<<<< HEAD

Kenzie Academy - Back-End: Módulo 4 - Capstone - Documentação API

Documentação referente a interligação de uma API em Node/ExpressJS e um banco de dados PostgreSQL com suas tabelas.

Tabela de Conteúdos


1. Visão Geral

Visão geral do projeto, um pouco das tecnologias usadas.


2. Diagrama ER

Voltar para o topo

Diagrama ER da API definindo bem as relações entre as tabelas do banco de dados.

DER


3. Início Rápido

Voltar para o topo

3.1. Instalando Dependências

Clone o projeto em sua máquina e instale as dependências com o comando:

yarn

3.2. Variáveis de Ambiente

Em seguida, crie um arquivo .env, copiando o formato do arquivo .env.example:

cp .env.example .env

Configure suas variáveis de ambiente com suas credenciais do Postgres e uma nova database da sua escolha.

3.3. Migrations

Crie as migration com o comando:

yarn typeorm migration:create src/migrations/descrição-da-migration

Em seguida, é preciso gerar as migrations com o seguindo comando:

yarn typeorm migration:generate src/migrations/descrição-da-migration -d src/data-source.ts

Para finalizar, execute as migrations com o comando:

yarn typeorm migration:run -d src/data-source.ts

3.4 Docker

Use o comando abaixo para iniciar o Docker

sudo docker-compose up -d

4. Autenticação

Voltar para o topo

Autenticação deve ser feita pelo usuário ao inserir os dados exigidos do arquivo .env.example.


5. Endpoints

Voltar para o topo

Índice


6. Usuários

Voltar para os Endpoints

O objeto User é definido como:

Campo Tipo Descrição
id string Identificador único do usuário
name string O nome do usuário.
nickname string O apelido do usuário.
birthday date A data de nascimento do usuário.
email string O e-mail do usuário.
password string A senha de acesso do usuário
isAdm boolean Define se um usuário é Administrador ou não
address Array Contém os endereços cadastrados do usuário
buys Array Contém as compras efetuadas do usuário
cart Array Contém os produtos do usuário para efetuar compra
creaetd_at date A data de criação do usuário.
updated_at date A data de atualização do usuário.

Obs: os campos name e password vêem encriptogrados na resposta, por motivos de privacidade do usuário.


6.1. Criação de Usuário

Voltar para os Endpoints

/users

Exemplo de Request:

POST /users
Host: http://localhost:3000
Authorization: None
Content-type: application/json

Corpo da Requisição:

{
  "name": "usuario 1",
  "nickname": "apelido do usuario 1",
  "birthday": "2000-01-01",
  "email": "[email protected]",
  "password": "12345678",
  "isAdm": true
}

Schema de Validação com Yup:

    name: yup
      .string()
      .min(3, "Must be at least 3 characters long")
      .required("Name is required"),
    nickname: yup
      .string()
      .min(3, "Must be at least 3 characters long")
      .required("Nickname is required"),
    birthday: yup
      .date()
      .max(new Date(minYear, minMonth, minDay), "You must be over 18 years old")
      .required("Birthday is required"),
    email: yup.string().email("Invalid email").required("Email is required"),
    password: yup
      .string()
      .min(8, "Must be at least 8 characters long")
      .required("Password is required"),
    isAdm: yup.boolean().required("isAdm is required"),

Exemplo de Response:

201 Created
{
  "id": "7519b538-0df9-4a07-9dde-387c96c342c2",
  "created_at": "2022-05-23T17:26:00.193Z",
  "updated_at": "2022-05-23T17:26:00.193Z",
  "name": "$2b$10$bTtduMVoS8F2mtowDosSqOIBFZQ.KVziuM.ysqfywlpho32PDiraO",
  "nickname": "apelido usuario 1",
  "birthday": "2000-02-02",
  "email": "[email protected]",
  "password": "$2b$10$wfnhldrB6iFECAQtWW7n8eYyV0DFl5yOezsWjpixLNjrmaMzO0d0y",
  "isAdm": true
}

Possíveis Erros:

Código do Erro Descrição
409 Conflict Email already registered.

6.2. Login de Usuário

Voltar para os Endpoints

/users/login

Requisitos:

O usuário já deverá ter sido criado.

Exemplo de Request:

POST /users
Host:http://localhost:3000
Authorization: None
Content-type: application/json

Corpo da Requisição:

{
  "email": "[email protected]",
  "password": "12345678"
}

Schema de Validação com Yup:

  email: yup
    .string()
    .email("Invalid email")
    .required("Email is required"),
  password: yup
    .string()
    .min(8, "Password is very short")
    .required("Password is required"),

Exemplo de Response:

200 Ok
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1MTliNTM4LTBkZjktNGEwNy05ZGRlLTM4N2M5NmMzNDJjMiIsImlzQWRtIjp0cnVlLCJpYXQiOjE2NTMzMjg1MzcsImV4cCI6MTY1MzQxNDkzN30.dS7nNTDrJJHpXjEMPn4RacknGKBSqDZggk49AHnLMmU"
}

Possíveis Erros:

Código do Erro Descrição
400 Bad Request Password is very short.
403 Forbidden Wrong email/password.

6.3. Listando Usuários

Voltar aos Endpoints

/users

Requisitos:

O usuário deve estar logado.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "id": "e1b880ab-a368-4659-a1b1-f428b4527737",
  "created_at": "2022-05-26T14:54:10.488Z",
  "updated_at": "2022-05-26T14:54:10.488Z",
  "name": "$2b$10$UfznE6UeDPER8tBMzRMZv.JBJ/72nImkdU1Zh7af2T7YPnv1puqqy",
  "nickname": "apelido do usuario 2",
  "birthday": "2000-12-12T02:00:00.000Z",
  "email": "[email protected]",
  "password": "$2b$10$9MHdNY7b0NuXH8..vfxSeuBpNcF/fEz59u8gv5L6KhDa2OVfs8sPK",
  "isAdm": true,
  "address": [
    {
      "created_at": "2022-05-26T16:08:17.069Z",
      "updated_at": "2022-05-26T16:08:17.069Z",
      "id": 1,
      "zipcode": "00000000",
      "street": "nome da rua do usuario 1",
      "number": "10",
      "neighborhood": "Bairro do usuario 1",
      "complement": "ex: casa"
    }
  ],
  "buys": [],
  "cart": {
    "id": "89d790e5-b054-4946-883b-ba0e584a045e",
    "total": 0,
    "products": []
  }
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Unauthorized.

6.4. Listando um Usuário

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "id": "e1b880ab-a368-4659-a1b1-f428b4527737",
  "created_at": "2022-05-26T14:54:10.488Z",
  "updated_at": "2022-05-26T14:54:10.488Z",
  "name": "$2b$10$UfznE6UeDPER8tBMzRMZv.JBJ/72nImkdU1Zh7af2T7YPnv1puqqy",
  "nickname": "apelido do usuario 2",
  "birthday": "2000-12-12T02:00:00.000Z",
  "email": "[email protected]",
  "password": "$2b$10$9MHdNY7b0NuXH8..vfxSeuBpNcF/fEz59u8gv5L6KhDa2OVfs8sPK",
  "isAdm": true,
  "address": [
    {
      "created_at": "2022-05-26T16:08:17.069Z",
      "updated_at": "2022-05-26T16:08:17.069Z",
      "id": 1,
      "zipcode": "00000000",
      "street": "nome da rua do usuario 1",
      "number": "10",
      "neighborhood": "Bairro do usuario 1",
      "complement": "ex: casa"
    }
  ],
  "buys": [],
  "cart": {
    "id": "89d790e5-b054-4946-883b-ba0e584a045e",
    "total": 0,
    "products": []
  }
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

6.5. Deletando um Usuário

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "message": "User deleted"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

6.6. Atualizando um Usuário

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
O nickname só pode ser atualizado caso tenha no mínimo 3 caracteres.
A senha só pode ser atualizada caso tenha no mínimo 8 caracteres.

Exemplo de Request:

GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "nickname": "apelido do usuario 2",
  "password": "senhaforte123456"
}

Obs: é possível atualizar apenas o nickname ou apenas o password, além de poder atualizar os dois juntos.

Exemplo de Response:

200 OK
{
  "id": "7519b538-0df9-4a07-9dde-387c96c342c2",
  "created_at": "2022-05-23T17:26:00.193Z",
  "updated_at": "2022-05-23T21:20:50.450Z",
  "name": "$2b$10$bTtduMVoS8F2mtowDosSqOIBFZQ.KVziuM.ysqfywlpho32PDiraO",
  "nickname": "apelido do usuario 2",
  "birthday": "2000-02-02T02:00:00.000Z",
  "email": "[email protected]",
  "password": "$2b$10$2XXl/G3qsCwhwFwJnTHiIuUq8EUi1FB5izweb5S7xzBDX0PYbNeiO",
  "isAdm": true,
  "address": [],
  "buys": []
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Must be at least 3 characters long.
400 Bad Request Must be at least 8 characters long.

7. Produtos

Voltar para os Endpoints

O objeto Produtos é definido como:

Campo Tipo Descrição
id string Identificador único do produto
name string O nome do produto.
description string A descrição do produto.
price number O preço do produto.
category string A categoria ao qual o produto pertence.
password string A senha de acesso do usuário
likes number A quantidade de likes que o produto possui.
creaetd_at date A data de criação do usuário.
updated_at date A data de atualização do usuário.

7.1. Criação de Produtos

Voltar para os Endpoints

/products

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto só poderá ser criado caso a categoria ao qual pertence já foi criada.

Exemplo de Request:

POST /products
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "category": "categoria 1"
}

Schema de Validação com Yup:

  name: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),
  description: yup.string().required("Description is required"),
  price: yup.number().required("Description is required"),
  category: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Description is required"),

Exemplo de Response:

201 Created
``
```json
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "likes": 0
}

Possíveis Erros:

Código do Erro Descrição
400 Bad Request Product already exists.
400 Bad Request Category was not informed.
404 Not Found Category not found.

7.2 Listando Produtos

Voltar aos Endpoints

/products

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /products/product
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

  id: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Id is required in params"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "likes": 0,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "order": []
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

7.3. Listando Produto por Nome

Voltar aos Endpoints

/products/product

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "produto 1"
}

Schema de Validação com Yup:

  name: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "likes": 0,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "order": []
}

Possíveis Erros:

Código do Erro Descrição
404 Not Found Product not found
401 Unauthorized Invalid Token.

7.4. Listando Produtos por Categoria

Voltar aos Endpoints

/porducts/category

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "category": "categoria 1"
}

Schema de Validação com Yup:

  category: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "likes": 0,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "order": []
}

Possíveis Erros:

Código do Erro Descrição
404 Not Found Category not found
401 Unauthorized Invalid Token.

7.5. Atualizando um Produto

Voltar aos Endpoints

/porducts/changes/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true).
O produto só pode ser atualizado caso já tenha sido criado.
A categoria só pode ser atualizada caso já tenha sido criada.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Schema de Validação com Yup:

   params: {
      yupSchema: yup.object().shape({
        id: yup
          .string()
          .min(1, "Id must be greater then 0")
          .required("Name is required"),
      }),
    },
    body: {
      yupSchema: yup.object().shape({
        name: yup.string().min(3, "Must be at least 3 characters long"),
        description: yup.string(),
        price: yup.number(),
        category: yup.string().min(3, "Must be at least 3 characters long"),
      }),
      validateOptions: {
        abortEarly: false,
      },
    },

Corpo da Requisição:

{
  "name": "produto 2",
  "description": "descrição do produto 2",
  "price": 400,
  "category": "categoria 2"
}

Obs: é possível atualizar apenas o nickname ou apenas o password, além de poder atualizar os dois juntos.

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Product updated with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
404 Not Found Category not found.

7.6. Deletando um Produto

Voltar aos Endpoints

/products/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true).
O produto só pode ser deletado caso já tenha sido criado.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

   category: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Product deleted with sucess!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

8. Categorias

Voltar para os Endpoints

O objeto Categorias é definido como:

Campo Tipo Descrição
id string Identificador da categoria
name string O nome da categoria.
discount_value number Define o valor de desconto para categoria.
creaetd_at date A data de criação da categoria.
updated_at date A data de atualização da categoria.

8.1. Criação de Categoria

Voltar para os Endpoints

/category

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
O nome deve ter no mínimo 3 caracteres

Exemplo de Request:

POST /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "categoria 1"
}

Schema de Validação com Yup:

  name: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

201 Created
{
  "created_at": "2022-05-24T14:50:50.029Z",
  "updated_at": "2022-05-24T14:50:50.029Z",
  "id": 2,
  "name": "categoria 1",
  "discount_value": 0
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Category already exists

8.2. Listando Categorias

Voltar aos Endpoints

/category

Requisitos:

O usuário deve estar logado.

Exemplo de Request:

GET /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:50:50.029Z",
  "updated_at": "2022-05-24T14:50:50.029Z",
  "id": 2,
  "name": "categoria 1",
  "discount_value": 0
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

8.3 Listando uma Categoria

Voltar aos Endpoints

/category/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
O id deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

  id: yup
    .number()
    .min(1, "Id must be greater then 0")
    .required("Id is required in params"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:50:50.029Z",
  "updated_at": "2022-05-24T14:50:50.029Z",
  "id": 2,
  "name": "categoria 1",
  "discount_value": 0
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
404 Not Found Category not found

8.4 Deletando uma Categoria

Voltar aos Endpoints

/category/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
O id deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

  id: yup
    .number()
    .min(1, "Id must be greater then 0")
    .required("Id is required in params"),

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Category deleted with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

8.5. Atualizando uma Categoria

Voltar aos Endpoints

/category/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
O id deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "categoria 2",
  "discount_value": 10
}

Schema de Validação com Yup:

  params: {
      yupSchema: yup.object().shape({
        id: yup
          .number()
          .min(1, "Id must be greater then 0")
          .required("Id is required in params"),
      }),
    },
    body: {
      yupSchema: yup.object().shape({
        name: yup.string().min(3, "Must be at least 3 characters long"),
        discount_value: yup.number(),
      }),
      validateOptions: {
        abortEarly: false,
      },
    },

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Category updated with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
404 Not Found Category not found
400 Bad Request Category already exists
400 Bad Request Must be at least 3 characters long

9. Endereços

Voltar para os Endpoints

O objeto User é definido como:

Campo Tipo Descrição
id number Identificador da categoria
street string O nome da rua do usuário.
number number Número da casa do usuário.
neighborhood string Nome do bairro do usuário.
zipcode string Cep da rua/cidade do usuário.
complement string Complemento opcional de endereço do usuário.
creaetd_at date A data de criação da categoria.
updated_at date A data de atualização da categoria.

9.1. Criação de Endereços

Voltar para os Endpoints

/address

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

POST /address
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "street": "nome da rua do usuario 2",
  "number": 10,
  "neighborhood": "Bairro do usuario 2",
  "zipcode": "00000000",
  "complement": "ex: casa"
}

Schema de Validação com Yup:

zipcode: yup
  .string().min(8, "CEP inválido, digite apenas números").max(8, "CEP inválido, digite apenas números").required("CEP is required"),
street: yup
  .string().min(8, "Street must be at least 8 characters long").required("Street is required"),
number: yup.string().required("Number is required"),
neighborhood: yup.string().required("Neighborhood is required"),
complement:yup.string().required("Complement is required"),

Exemplo de Response:

201 Created
{
  "created_at": "2022-05-26T16:12:01.037Z",
  "updated_at": "2022-05-26T16:12:01.037Z",
  "zipcode": "00000000",
  "street": "nome da rua do usuario 2",
  "number": 10,
  "neighborhood": "Bairro do usuario 2",
  "complement": "ex: casa",
  "user": {
    "id": "e1b880ab-a368-4659-a1b1-f428b4527737",
    "created_at": "2022-05-26T14:54:10.488Z",
    "updated_at": "2022-05-26T14:54:10.488Z",
    "name": "$2b$10$UfznE6UeDPER8tBMzRMZv.JBJ/72nImkdU1Zh7af2T7YPnv1puqqy",
    "nickname": "apelido do usuario 2",
    "birthday": "2000-12-12T02:00:00.000Z",
    "email": "[email protected]",
    "password": "$2b$10$9MHdNY7b0NuXH8..vfxSeuBpNcF/fEz59u8gv5L6KhDa2OVfs8sPK",
    "isAdm": true,
    "address": [
      {
        "created_at": "2022-05-26T16:08:17.069Z",
        "updated_at": "2022-05-26T16:08:17.069Z",
        "id": 1,
        "zipcode": "00000000",
        "street": "nome da rua do usuario 1",
        "number": "10",
        "neighborhood": "Bairro do usuario 1",
        "complement": "ex: casa"
      }
    ],
    "buys": [],
    "cart": {
      "id": "89d790e5-b054-4946-883b-ba0e584a045e",
      "total": 0,
      "products": []
    }
  },
  "id": 2
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request CEP is required
400 Bad Request Neighborhood is required
400 Bad Request Complement is required

9.2. Listando Endereços

Voltar aos Endpoints

/address

Requisitos:

O usuário deve estar logado.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)

Exemplo de Request:

GET /address
Host: http://localhost:3000
Authorization: Token
Content-type: None

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
[
  {
    "created_at": "2022-05-26T16:08:17.069Z",
    "updated_at": "2022-05-26T16:08:17.069Z",
    "id": 1,
    "zipcode": "00000000",
    "street": "nome da rua do usuario 1",
    "number": "10",
    "neighborhood": "Bairro do usuario 1",
    "complement": "ex: casa"
  }
]

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

9.3 Listando Endereços de um Usuário

Voltar aos Endpoints

/address/self

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /address/self
Host: http://localhost:3000
Authorization: Token
Content-type: None

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
[
  {
    "created_at": "2022-05-26T16:08:17.069Z",
    "updated_at": "2022-05-26T16:08:17.069Z",
    "id": 1,
    "zipcode": "00000000",
    "street": "nome da rua do usuario 1",
    "number": "10",
    "neighborhood": "Bairro do usuario 1",
    "complement": "ex: casa"
  }
]

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

9.4 Deletando um Endereço

Voltar aos Endpoints

/address/

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /address
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "addressId": 1
}

Schema de Validação com Yup:

addressId: yup
  .number()
  .min(1, "AddressId must be greater than 0")
  .required("AddressId is required");

Exemplo de Response:

200 OK
{
  "message": "Address deleted with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Address not found!
400 Bad Request AddressId is required

9.5. Atualizando um Endereço

Voltar aos Endpoints

/address/adm/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
O id do endereço deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /address/adm/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "street": "nome da rua do usuario 1",
  "number": 10,
  "neighborhood": "Bairro do usuario 1",
  "zipcode": "00000000",
  "complement": "ex: casa"
}

Schema de Validação com Yup:

addressId: yup
  .number()
  .min(1, "AddressId must be greater than 0")
  .required("AddressId is required");

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Address updated with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request AddressId is required
400 Bad Request AddressId must be greater than 0

10. Carrinho

Voltar para os Endpoints

O objeto Carrinho é definido como:

Campo Tipo Descrição
id number Identificador da categoria
total number Valor da soma de todosprodutos do carrinho
products array Todos produtos adicionados no carrinho

10.1. Adicionando Produto no Carrinho

Voltar para os Endpoints

/cart

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

POST /cart
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "productName": "produto 1"
}

Exemplo de Response:

200 Ok
{
  "id": "15309547-a757-44f0-be48-580d616e3d0a",
  "total": 50,
  "products": [
    {
      "id": "f54bc25b-2a64-4c3f-94b5-d246694dcc8a",
      "created_at": "2022-05-26T16:47:27.181Z",
      "updated_at": "2022-05-26T16:47:27.181Z",
      "name": "produto 1",
      "description": "descricao do produto 1",
      "price": 50,
      "likes": 0,
      "category": {
        "created_at": "2022-05-26T14:58:04.933Z",
        "updated_at": "2022-05-26T14:58:04.933Z",
        "id": 1,
        "name": "categoria 1",
        "discount_value": 0
      }
    }
  ]
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Product is already in the cart
400 Bad Request Product not found

10.2. Deletando Produto do Carrinho

Voltar aos Endpoints

/cart/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /cart/:id
Host: http://localhost:3000
Authorization: Token
Content-type: None

Corpo da Requisição:

Vazio

Exemplo de Response:

204 No Content
No body retruned for response

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Invalid Id

11. Compras efetuadas

Voltar para os Endpoints

O objeto Buy é definido como:

Campo Tipo Descrição
id string Identificador da compra do usuário
status string Status da compra do usuário
total number Valor total da compra do usuário
products array Produtos comprados pelo usuário
creaetd_at date A data de criação da categoria.
updated_at date A data de atualização da categoria.

11.1. Comprando Produtos do Carrinho

Voltar para os Endpoints

/buy

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

POST /buy
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "productName": "produto 1"
}

Exemplo de Response:

201 Created
[
  {
    "id": "6f8c479b-d1c1-4b93-a3da-bdc73df1fbb8",
    "created_at": "2022-05-26T17:57:32.466Z",
    "updated_at": "2022-05-26T17:57:32.466Z",
    "status": "Em aberto",
    "total": 50,
    "products": [
      {
        "id": "f54bc25b-2a64-4c3f-94b5-d246694dcc8a",
        "created_at": "2022-05-26T16:47:27.181Z",
        "updated_at": "2022-05-26T16:47:27.181Z",
        "name": "produto 1",
        "description": "descricao do produto 1",
        "price": 50,
        "likes": 0,
        "category": {
          "created_at": "2022-05-26T14:58:04.933Z",
          "updated_at": "2022-05-26T14:58:04.933Z",
          "id": 1,
          "name": "categoria 1",
          "discount_value": 0
        }
      }
    ],
    "product": []
  }
]

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

Insomnia - Importação para Testes de Requisições

Variáveis do Insomnia Valores
baseURL "http://localhost:3000"
baseHerokuURL "https://api-capstone-grupo8.herokuapp.com/"
token gerado automático pelo elemento 0
userID gerado automático pelo elemento 0
productID gerado automático pelo elemento 0

Run in Insomnia}

Kenzie Academy - Back-End: Módulo 4 - Capstone - Documentação API

Documentação referente a interligação de uma API em Node/ExpressJS e um banco de dados PostgreSQL com suas tabelas.

Tabela de Conteúdos


1. Visão Geral

Visão geral do projeto, um pouco das tecnologias usadas.


2. Diagrama ER

Voltar para o topo

Diagrama ER da API definindo bem as relações entre as tabelas do banco de dados.

DER


3. Início Rápido

Voltar para o topo

3.1. Instalando Dependências

Clone o projeto em sua máquina e instale as dependências com o comando:

yarn

3.2. Variáveis de Ambiente

Em seguida, crie um arquivo .env, copiando o formato do arquivo .env.example:

cp .env.example .env

Configure suas variáveis de ambiente com suas credenciais do Postgres e uma nova database da sua escolha.

3.3. Migrations

Crie as migration com o comando:

yarn typeorm migration:create src/migrations/descrição-da-migration

Em seguida, é preciso gerar as migrations com o seguindo comando:

yarn typeorm migration:generate src/migrations/descrição-da-migration -d src/data-source.ts

Para finalizar, execute as migrations com o comando:

yarn typeorm migration:run -d src/data-source.ts

3.4 Docker

Use o comando abaixo para iniciar o Docker

sudo docker-compose up -d

4. Autenticação

Voltar para o topo

Colocar autenticações aqui caso existam.


5. Endpoints

Voltar para o topo

Índice


6. Usuários

Voltar para os Endpoints

O objeto User é definido como:

Campo Tipo Descrição
id string Identificador único do usuário
name string O nome do usuário.
nickname string O apelido do usuário.
birthday date A data de nascimento do usuário.
email string O e-mail do usuário.
password string A senha de acesso do usuário
isAdm boolean Define se um usuário é Administrador ou não.
creaetd_at date A data de criação do usuário.
updated_at date A data de atualização do usuário.

Obs: os campos name e password vêem encriptogrados na resposta, por motivos de privacidade do usuário.


6.1. Criação de Usuário

Voltar para os Endpoints

/users

Exemplo de Request:

POST /users
Host: http://localhost:3000
Authorization: None
Content-type: application/json

Corpo da Requisição:

{
  "name": "usuario 1",
  "nickname": "apelido do usuario 1",
  "birthday": "2000-01-01",
  "email": "[email protected]",
  "password": "12345678",
  "isAdm": true
}

Schema de Validação com Yup:

    name: yup
      .string()
      .min(3, "Must be at least 3 characters long")
      .required("Name is required"),
    nickname: yup
      .string()
      .min(3, "Must be at least 3 characters long")
      .required("Nickname is required"),
    birthday: yup
      .date()
      .max(new Date(minYear, minMonth, minDay), "You must be over 18 years old")
      .required("Birthday is required"),
    email: yup.string().email("Invalid email").required("Email is required"),
    password: yup
      .string()
      .min(8, "Must be at least 8 characters long")
      .required("Password is required"),
    isAdm: yup.boolean().required("isAdm is required"),

Exemplo de Response:

201 Created
{
  "id": "7519b538-0df9-4a07-9dde-387c96c342c2",
  "created_at": "2022-05-23T17:26:00.193Z",
  "updated_at": "2022-05-23T17:26:00.193Z",
  "name": "$2b$10$bTtduMVoS8F2mtowDosSqOIBFZQ.KVziuM.ysqfywlpho32PDiraO",
  "nickname": "apelido usuario 1",
  "birthday": "2000-02-02",
  "email": "[email protected]",
  "password": "$2b$10$wfnhldrB6iFECAQtWW7n8eYyV0DFl5yOezsWjpixLNjrmaMzO0d0y",
  "isAdm": true
}

Possíveis Erros:

Código do Erro Descrição
409 Conflict Email already registered.

6.2. Login de Usuário

Voltar para os Endpoints

/users/login

Requisitos:

O usuário já deverá ter sido criado.

Exemplo de Request:

POST /users
Host:http://localhost:3000
Authorization: None
Content-type: application/json

Corpo da Requisição:

{
  "email": "[email protected]",
  "password": "12345678"
}

Schema de Validação com Yup:

  email: yup
    .string()
    .email("Invalid email")
    .required("Email is required"),
  password: yup
    .string()
    .min(8, "Password is very short")
    .required("Password is required"),

Exemplo de Response:

200 Ok
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1MTliNTM4LTBkZjktNGEwNy05ZGRlLTM4N2M5NmMzNDJjMiIsImlzQWRtIjp0cnVlLCJpYXQiOjE2NTMzMjg1MzcsImV4cCI6MTY1MzQxNDkzN30.dS7nNTDrJJHpXjEMPn4RacknGKBSqDZggk49AHnLMmU"
}

Possíveis Erros:

Código do Erro Descrição
400 Bad Request Password is very short.
403 Forbidden Wrong email/password.

6.3. Listando Usuários

Voltar aos Endpoints

/users

Requisitos:

O usuário deve estar logado.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "id": "7519b538-0df9-4a07-9dde-387c96c342c2",
  "created_at": "2022-05-23T17:26:00.193Z",
  "updated_at": "2022-05-23T17:26:00.193Z",
  "name": "$2b$10$bTtduMVoS8F2mtowDosSqOIBFZQ.KVziuM.ysqfywlpho32PDiraO",
  "nickname": "apelido usuario 1",
  "birthday": "2000-02-02T02:00:00.000Z",
  "email": "[email protected]",
  "password": "$2b$10$wfnhldrB6iFECAQtWW7n8eYyV0DFl5yOezsWjpixLNjrmaMzO0d0y",
  "isAdm": true,
  "address": [],
  "buys": []
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Unauthorized.

6.4. Listando um Usuário

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "id": "7519b538-0df9-4a07-9dde-387c96c342c2",
  "created_at": "2022-05-23T17:26:00.193Z",
  "updated_at": "2022-05-23T17:26:00.193Z",
  "name": "$2b$10$bTtduMVoS8F2mtowDosSqOIBFZQ.KVziuM.ysqfywlpho32PDiraO",
  "nickname": "apelido usuario 1",
  "birthday": "2000-02-02T02:00:00.000Z",
  "email": "[email protected]",
  "password": "$2b$10$wfnhldrB6iFECAQtWW7n8eYyV0DFl5yOezsWjpixLNjrmaMzO0d0y",
  "isAdm": true,
  "address": [],
  "buys": []
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

6.5. Deletando um Usuário

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "message": "User deleted"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

6.6. Atualizando um Usuário

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
O nickname só pode ser atualizado caso tenha no mínimo 3 caracteres.
A senha só pode ser atualizada caso tenha no mínimo 8 caracteres.

Exemplo de Request:

GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "nickname": "apelido do usuario 2",
  "password": "senhaforte123456"
}

Obs: é possível atualizar apenas o nickname ou apenas o password, além de poder atualizar os dois juntos.

Exemplo de Response:

200 OK
{
  "id": "7519b538-0df9-4a07-9dde-387c96c342c2",
  "created_at": "2022-05-23T17:26:00.193Z",
  "updated_at": "2022-05-23T21:20:50.450Z",
  "name": "$2b$10$bTtduMVoS8F2mtowDosSqOIBFZQ.KVziuM.ysqfywlpho32PDiraO",
  "nickname": "apelido do usuario 2",
  "birthday": "2000-02-02T02:00:00.000Z",
  "email": "[email protected]",
  "password": "$2b$10$2XXl/G3qsCwhwFwJnTHiIuUq8EUi1FB5izweb5S7xzBDX0PYbNeiO",
  "isAdm": true,
  "address": [],
  "buys": []
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Must be at least 3 characters long.
400 Bad Request Must be at least 8 characters long.

7. Produtos

Voltar para os Endpoints

O objeto User é definido como:

Campo Tipo Descrição
id string Identificador único do produto
name string O nome do produto.
description string A descrição do produto.
price number O preço do produto.
category string A categoria ao qual o produto pertence.
password string A senha de acesso do usuário
likes number A quantidade de likes que o produto possui.
creaetd_at date A data de criação do usuário.
updated_at date A data de atualização do usuário.

7.1. Criação de Produtos

Voltar para os Endpoints

/products

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto só poderá ser criado caso a categoria ao qual pertence já foi criada.

Exemplo de Request:

POST /products
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "category": "categoria 1"
}

Schema de Validação com Yup:

  name: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),
  description: yup.string().required("Description is required"),
  price: yup.number().required("Description is required"),
  category: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Description is required"),

Exemplo de Response:

201 Created
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "likes": 0
}

Possíveis Erros:

Código do Erro Descrição
400 Bad Request Product already exists.
400 Bad Request Category was not informed.
404 Not Found Category not found.

7.2. Listando Produtos

Voltar aos Endpoints

/products

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.

Exemplo de Request:

GET /products/product
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

  id: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Id is required in params"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "likes": 0,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "order": []
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

6.3. Listando Produto por Nome

Voltar aos Endpoints

/products/product

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "produto 1"
}

Schema de Validação com Yup:

  name: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "likes": 0,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "order": []
}

Possíveis Erros:

Código do Erro Descrição
404 Not Found Product not found
401 Unauthorized Invalid Token.

6.4. Listando Produtos por Categoria

Voltar aos Endpoints

/porducts/category

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "category": "categoria 1"
}

Schema de Validação com Yup:

  category: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:51:19.520Z",
  "updated_at": "2022-05-24T14:51:19.520Z",
  "id": "94c17132-4b76-497f-bda3-0116c8461d48",
  "name": "produto 1",
  "description": "descrição do produto 1",
  "price": 600,
  "likes": 0,
  "category": {
    "created_at": "2022-05-24T14:50:50.029Z",
    "updated_at": "2022-05-24T14:50:50.029Z",
    "id": 2,
    "name": "categoria 1",
    "discount_value": 0
  },
  "order": []
}

Possíveis Erros:

Código do Erro Descrição
404 Not Found Category not found
401 Unauthorized Invalid Token.

6.5. Atualizando um Produto

Voltar aos Endpoints

/porducts/changes/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true).
O produto só pode ser atualizado caso já tenha sido criado.
A categoria só pode ser atualizada caso já tenha sido criada.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Schema de Validação com Yup:

   params: {
      yupSchema: yup.object().shape({
        id: yup
          .string()
          .min(1, "Id must be greater then 0")
          .required("Name is required"),
      }),
    },
    body: {
      yupSchema: yup.object().shape({
        name: yup.string().min(3, "Must be at least 3 characters long"),
        description: yup.string(),
        price: yup.number(),
        category: yup.string().min(3, "Must be at least 3 characters long"),
      }),
      validateOptions: {
        abortEarly: false,
      },
    },

Corpo da Requisição:

{
  "name": "produto 2",
  "description": "descrição do produto 2",
  "price": 400,
  "category": "categoria 2"
}

Obs: é possível atualizar apenas o nickname ou apenas o password, além de poder atualizar os dois juntos.

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Product updated with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
404 Not Found Category not found.

7.6. Deletando um Produto

Voltar aos Endpoints

/users/me

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true).
O produto só pode ser deletado caso já tenha sido criado.

Exemplo de Request:

GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

   category: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Product deleted with sucess!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

8. Categorias

Voltar para os Endpoints

O objeto User é definido como:

Campo Tipo Descrição
id string Identificador da categoria
name string O nome da categoria.
discount_value number Define o valor de desconto para categoria.
creaetd_at date A data de criação da categoria.
updated_at date A data de atualização da categoria.

8.1. Criação de Categoria

Voltar para os Endpoints

/category

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
O nome deve ter no mínimo 3 caracteres

Exemplo de Request:

POST /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "categoria 1"
}

Schema de Validação com Yup:

  name: yup
    .string()
    .min(3, "Must be at least 3 characters long")
    .required("Name is required"),

Exemplo de Response:

201 Created
{
  "created_at": "2022-05-24T14:50:50.029Z",
  "updated_at": "2022-05-24T14:50:50.029Z",
  "id": 2,
  "name": "categoria 1",
  "discount_value": 0
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
400 Bad Request Category already exists

8.2. Listando Categorias

Voltar aos Endpoints

/category

Requisitos:

O usuário deve estar logado.

Exemplo de Request:

GET /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:50:50.029Z",
  "updated_at": "2022-05-24T14:50:50.029Z",
  "id": 2,
  "name": "categoria 1",
  "discount_value": 0
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

8.3 Listando uma Categoria

Voltar aos Endpoints

/category/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
O id deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

  id: yup
    .number()
    .min(1, "Id must be greater then 0")
    .required("Id is required in params"),

Exemplo de Response:

200 OK
{
  "created_at": "2022-05-24T14:50:50.029Z",
  "updated_at": "2022-05-24T14:50:50.029Z",
  "id": 2,
  "name": "categoria 1",
  "discount_value": 0
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
404 Not Found Category not found

8.4 Deletando uma Categoria

Voltar aos Endpoints

/category/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
O id deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

Vazio

Schema de Validação com Yup:

  id: yup
    .number()
    .min(1, "Id must be greater then 0")
    .required("Id is required in params"),

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Category deleted with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.

8.5. Atualizando uma Categoria

Voltar aos Endpoints

/category/:id

Requisitos:

O usuário deve estar logado e o token gerado deve ser inserido no Header.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
O id deve ser inserido nos parâmetros e deve ser maior que 0.

Exemplo de Request:

GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json

Corpo da Requisição:

{
  "name": "categoria 2",
  "discount_value": 10
}

Schema de Validação com Yup:

  params: {
      yupSchema: yup.object().shape({
        id: yup
          .number()
          .min(1, "Id must be greater then 0")
          .required("Id is required in params"),
      }),
    },
    body: {
      yupSchema: yup.object().shape({
        name: yup.string().min(3, "Must be at least 3 characters long"),
        discount_value: yup.number(),
      }),
      validateOptions: {
        abortEarly: false,
      },
    },

Exemplo de Response:

200 OK
{
  "status": true,
  "message": "Category updated with success!"
}

Possíveis Erros:

Código do Erro Descrição
401 Unauthorized Invalid Token.
404 Not Found Category not found
400 Bad Request Category already exists
400 Bad Request Must be at least 3 characters long

Insomnia - Importação para Testes de Requisições

Variáveis do Insomnia Valores
baseURL "http://localhost:3000"
baseHerokuURL "https://api-capstone-grupo8.herokuapp.com/"
token gerado automático pelo elemento 0
userID gerado automático pelo elemento 0
productID gerado automático pelo elemento 0

Run in Insomnia}

8d1cffe9108facd890c380f15b510af84c47e951

capstone-nodejs-m4's People

Contributors

emeraldknight-sp avatar hamartrony avatar jeanknieling avatar wellerychaves avatar murilo-bot avatar natanfiuza avatar

Stargazers

 avatar

Watchers

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