<<<<<<< HEAD
Documentação referente a interligação de uma API em Node/ExpressJS e um banco de dados PostgreSQL com suas tabelas.
- Kenzie Academy - Back-End: Módulo 4 - Capstone - Documentação API
- Tabela de Conteúdos
- 1. Visão Geral
- 2. Diagrama ER
- 3. Início Rápido
- 4. Autenticação
- 5. Endpoints
- 6. Usuários
- 6.1. Criação de Usuário
/users
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.2. Login de Usuário
/users/login
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.3. Listando Usuários
/users
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 6.4. Listando um Usuário
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 6.5. Deletando um Usuário
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 6.6. Atualizando um Usuário
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 7. Produtos
- 7.1. Criação de Produtos
/products
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 7.3. Listando Produto por Nome
/products/product
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 7.4. Listando Produtos por Categoria
/porducts/category
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 7.5. Atualizando um Produto
/porducts/changes/:id
- Requisitos:
- Exemplo de Request:
- Schema de Validação com Yup:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 7.6. Deletando um Produto
/products/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8. Categorias
- 8.1. Criação de Categoria
/category
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8.2. Listando Categorias
/category
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 8.3 Listando uma Categoria
/category/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8.4 Deletando uma Categoria
/category/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8.5. Atualizando uma Categoria
/category/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- 9. Endereços
- 9.1. Criação de Endereços
/address
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 9.2. Listando Endereços
/address
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 9.3 Listando Endereços de um Usuário
/address/self
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 9.4 Deletando um Endereço
/address/
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 9.5. Atualizando um Endereço
/address/adm/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- 10. Carrinho
- 11. Compras efetuadas
- Insomnia - Importação para Testes de Requisições
Visão geral do projeto, um pouco das tecnologias usadas.
Diagrama ER da API definindo bem as relações entre as tabelas do banco de dados.
Clone o projeto em sua máquina e instale as dependências com o comando:
yarn
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.
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
Use o comando abaixo para iniciar o Docker
sudo docker-compose up -d
Autenticação deve ser feita pelo usuário ao inserir os dados exigidos do arquivo .env.example.
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. |
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.
POST /users
Host: http://localhost:3000
Authorization: None
Content-type: application/json
{
"name": "usuario 1",
"nickname": "apelido do usuario 1",
"birthday": "2000-01-01",
"email": "[email protected]",
"password": "12345678",
"isAdm": true
}
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"),
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
}
Código do Erro | Descrição |
---|---|
409 Conflict | Email already registered. |
O usuário já deverá ter sido criado.
POST /users
Host:http://localhost:3000
Authorization: None
Content-type: application/json
{
"email": "[email protected]",
"password": "12345678"
}
email: yup
.string()
.email("Invalid email")
.required("Email is required"),
password: yup
.string()
.min(8, "Password is very short")
.required("Password is required"),
200 Ok
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1MTliNTM4LTBkZjktNGEwNy05ZGRlLTM4N2M5NmMzNDJjMiIsImlzQWRtIjp0cnVlLCJpYXQiOjE2NTMzMjg1MzcsImV4cCI6MTY1MzQxNDkzN30.dS7nNTDrJJHpXjEMPn4RacknGKBSqDZggk49AHnLMmU"
}
Código do Erro | Descrição |
---|---|
400 Bad Request | Password is very short. |
403 Forbidden | Wrong email/password. |
O usuário deve estar logado.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
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": []
}
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Unauthorized. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
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": []
}
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
200 OK
{
"message": "User deleted"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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.
GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"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.
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": []
}
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. |
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. |
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.
POST /products
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "produto 1",
"description": "descrição do produto 1",
"price": 600,
"category": "categoria 1"
}
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"),
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
}
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. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /products/product
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
id: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Id is required in params"),
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": []
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "produto 1"
}
name: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
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": []
}
Código do Erro | Descrição |
---|---|
404 Not Found | Product not found |
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"category": "categoria 1"
}
category: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
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": []
}
Código do Erro | Descrição |
---|---|
404 Not Found | Category not found |
401 Unauthorized | Invalid Token. |
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.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
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,
},
},
{
"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.
200 OK
{
"status": true,
"message": "Product updated with success!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
404 Not Found | Category not found. |
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.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
category: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
200 OK
{
"status": true,
"message": "Product deleted with sucess!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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. |
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
POST /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "categoria 1"
}
name: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
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
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
400 Bad Request | Category already exists |
O usuário deve estar logado.
GET /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
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
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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.
GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
id: yup
.number()
.min(1, "Id must be greater then 0")
.required("Id is required in params"),
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
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
404 Not Found | Category not found |
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.
GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
id: yup
.number()
.min(1, "Id must be greater then 0")
.required("Id is required in params"),
200 OK
{
"status": true,
"message": "Category deleted with success!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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.
GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "categoria 2",
"discount_value": 10
}
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,
},
},
200 OK
{
"status": true,
"message": "Category updated with success!"
}
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 |
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. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
POST /address
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"street": "nome da rua do usuario 2",
"number": 10,
"neighborhood": "Bairro do usuario 2",
"zipcode": "00000000",
"complement": "ex: casa"
}
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"),
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
}
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 |
O usuário deve estar logado.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
GET /address
Host: http://localhost:3000
Authorization: Token
Content-type: None
Vazio
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"
}
]
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /address/self
Host: http://localhost:3000
Authorization: Token
Content-type: None
Vazio
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"
}
]
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /address
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"addressId": 1
}
addressId: yup
.number()
.min(1, "AddressId must be greater than 0")
.required("AddressId is required");
200 OK
{
"message": "Address deleted with success!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
400 Bad Request | Address not found! |
400 Bad Request | AddressId is required |
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.
GET /address/adm/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"street": "nome da rua do usuario 1",
"number": 10,
"neighborhood": "Bairro do usuario 1",
"zipcode": "00000000",
"complement": "ex: casa"
}
addressId: yup
.number()
.min(1, "AddressId must be greater than 0")
.required("AddressId is required");
200 OK
{
"status": true,
"message": "Address updated with success!"
}
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 |
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 |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
POST /cart
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"productName": "produto 1"
}
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
}
}
]
}
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 |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /cart/:id
Host: http://localhost:3000
Authorization: Token
Content-type: None
Vazio
204 No Content
No body retruned for response
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
400 Bad Request | Invalid Id |
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. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
POST /buy
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"productName": "produto 1"
}
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": []
}
]
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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 |
Documentação referente a interligação de uma API em Node/ExpressJS e um banco de dados PostgreSQL com suas tabelas.
- Kenzie Academy - Back-End: Módulo 4 - Capstone - Documentação API
- Tabela de Conteúdos
- 1. Visão Geral
- 2. Diagrama ER
- 3. Início Rápido
- 4. Autenticação
- 5. Endpoints
- 6. Usuários
- 6.1. Criação de Usuário
/users
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.2. Login de Usuário
/users/login
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.3. Listando Usuários
/users
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 6.4. Listando um Usuário
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 6.5. Deletando um Usuário
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 6.6. Atualizando um Usuário
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 7. Produtos
- 7.1. Criação de Produtos
/products
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 7.2. Listando Produtos
/products
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.3. Listando Produto por Nome
/products/product
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.4. Listando Produtos por Categoria
/porducts/category
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 6.5. Atualizando um Produto
/porducts/changes/:id
- Requisitos:
- Exemplo de Request:
- Schema de Validação com Yup:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 7.6. Deletando um Produto
/users/me
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8. Categorias
- 8.1. Criação de Categoria
/category
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8.2. Listando Categorias
/category
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Exemplo de Response:
- Possíveis Erros:
- 8.3 Listando uma Categoria
/category/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8.4 Deletando uma Categoria
/category/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Exemplo de Response:
- Possíveis Erros:
- 8.5. Atualizando uma Categoria
/category/:id
- Requisitos:
- Exemplo de Request:
- Corpo da Requisição:
- Schema de Validação com Yup:
- Insomnia - Importação para Testes de Requisições
Visão geral do projeto, um pouco das tecnologias usadas.
Diagrama ER da API definindo bem as relações entre as tabelas do banco de dados.
Clone o projeto em sua máquina e instale as dependências com o comando:
yarn
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.
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
Use o comando abaixo para iniciar o Docker
sudo docker-compose up -d
Colocar autenticações aqui caso existam.
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. |
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.
POST /users
Host: http://localhost:3000
Authorization: None
Content-type: application/json
{
"name": "usuario 1",
"nickname": "apelido do usuario 1",
"birthday": "2000-01-01",
"email": "[email protected]",
"password": "12345678",
"isAdm": true
}
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"),
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
}
Código do Erro | Descrição |
---|---|
409 Conflict | Email already registered. |
O usuário já deverá ter sido criado.
POST /users
Host:http://localhost:3000
Authorization: None
Content-type: application/json
{
"email": "[email protected]",
"password": "12345678"
}
email: yup
.string()
.email("Invalid email")
.required("Email is required"),
password: yup
.string()
.min(8, "Password is very short")
.required("Password is required"),
200 Ok
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6Ijc1MTliNTM4LTBkZjktNGEwNy05ZGRlLTM4N2M5NmMzNDJjMiIsImlzQWRtIjp0cnVlLCJpYXQiOjE2NTMzMjg1MzcsImV4cCI6MTY1MzQxNDkzN30.dS7nNTDrJJHpXjEMPn4RacknGKBSqDZggk49AHnLMmU"
}
Código do Erro | Descrição |
---|---|
400 Bad Request | Password is very short. |
403 Forbidden | Wrong email/password. |
O usuário deve estar logado.
Apenas usuário administrador pode fazer esta requisição. (isAdm: true)
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
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": []
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Unauthorized. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
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": []
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
200 OK
{
"message": "User deleted"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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.
GET /users/me
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"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.
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": []
}
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. |
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. |
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.
POST /products
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "produto 1",
"description": "descrição do produto 1",
"price": 600,
"category": "categoria 1"
}
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"),
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
}
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. |
O usuário deve estar logado e o token gerado deve ser inserido no Header.
GET /products/product
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
id: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Id is required in params"),
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": []
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "produto 1"
}
name: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
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": []
}
Código do Erro | Descrição |
---|---|
404 Not Found | Product not found |
401 Unauthorized | Invalid Token. |
O usuário deve estar logado e o token gerado deve ser inserido no Header. O produto já deve estar criado.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"category": "categoria 1"
}
category: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
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": []
}
Código do Erro | Descrição |
---|---|
404 Not Found | Category not found |
401 Unauthorized | Invalid Token. |
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.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
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,
},
},
{
"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.
200 OK
{
"status": true,
"message": "Product updated with success!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
404 Not Found | Category not found. |
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.
GET /users
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
category: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
200 OK
{
"status": true,
"message": "Product deleted with sucess!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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. |
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
POST /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "categoria 1"
}
name: yup
.string()
.min(3, "Must be at least 3 characters long")
.required("Name is required"),
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
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
400 Bad Request | Category already exists |
O usuário deve estar logado.
GET /category
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
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
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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.
GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
id: yup
.number()
.min(1, "Id must be greater then 0")
.required("Id is required in params"),
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
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
404 Not Found | Category not found |
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.
GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
Vazio
id: yup
.number()
.min(1, "Id must be greater then 0")
.required("Id is required in params"),
200 OK
{
"status": true,
"message": "Category deleted with success!"
}
Código do Erro | Descrição |
---|---|
401 Unauthorized | Invalid Token. |
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.
GET /category/:id
Host: http://localhost:3000
Authorization: Token
Content-type: application/json
{
"name": "categoria 2",
"discount_value": 10
}
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,
},
},
200 OK
{
"status": true,
"message": "Category updated with success!"
}
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 |
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 |
8d1cffe9108facd890c380f15b510af84c47e951