Skip to content

Latest commit

 

History

History
586 lines (448 loc) · 7.96 KB

README.md

File metadata and controls

586 lines (448 loc) · 7.96 KB

Migueis API 🚀

Overview

A Migueis-API é uma API desenvolvida na matéria de Projeto Integrador 6 com a finalidade de complementar o sistema desenvolvido para o restaurante da rede Migueis.

Fluxos

User

Registro

Para registrar um usuário, o trabalho de criar a chave privada e chave publica é do Front-End. O Back apenas armazena essas informações. O Front deve encriptar a chave privada com a senha pura do usuário e para evitar que alguem no meio do caminho pegue essa senha pura, o Front deve hashear essa senha antes de enviar. No Back pegamos esse hash e fazemos o encrypt com o bcrypt e então guardamos a senha no banco.

Registro de Admin

O admin tem todas as caracteristicas de um usuário normal

Apenas um admin consegue cadastrar outro admin. Para fazermos isso, no momento de implantação sistema, deve ser colocado um admin generico no banco apenas para criar os outros e então esse admin deve ser REMOVIDO.

Login

Para logar, o Front deve mandar um header com authenticação "Basic" enviando o email e o hash da senha.

Auth

Para fazer as requisições que precisam de auth o front deve criar um jwt com a chave privada do user e mandar no header:

Authorization: `Bearer ${jwt}`,
'X-User-Email': userEmail
Header generation
const token = jwt.sign({ email }, privateKey, { algorithm: "RS256" });
const headers = {
  Authorization: `Bearer ${token}`,
  "X-User-Email": email,
};

Endpoints

Admin Auth

User Auth

Products

Autenticação Necessaria Header Generation

List
GET /products
Response
[
  {
    "id": 1,
    "name": "water",
    "description": "To drink",
    "price": 5.5,
    "quantity": 10,

    "category": {
      "name": "drink",
      "id": 1
    },

    "images": [
      {
        "id": 1,
        "url": "${url}/uploads/image-name.ext"
      }
    ]
  }
]
List One
GET /products/:id
Response
{
  "id": 1,
  "name": "water",
  "description": "To drink",
  "price": 5.5,
  "quantity": 10,

  "category": {
    "name": "drink",
    "id": 1
  },

  "images": [
    {
      "id": 1,
      "url": "${url}/uploads/image-name.ext"
    }
  ]
}
Add
PUT /products
Input
Name Type
name string
description string
price number
quantity number
category number
image file

Category need to exist

Response
{
  "id": 1,
  "name": "water",
  "description": "To drink",
  "price": 5.5,
  "quantity": 10,

  "category": {
    "name": "drink",
    "id": 1
  },

  "images": [
    {
      "id": 1,
      "url": "${url}/uploads/image-name.ext"
    }
  ]
}
Update
PUT /products/:id
Input
Name Type
name string
description string
price number
quantity number
category number
image file

Category need to exist

Response
{
  "id": 1,
  "name": "water",
  "description": "To drink",
  "price": 5.5,
  "quantity": 10,

  "category": {
    "name": "drink",
    "id": 1
  },

  "images": [
    {
      "id": 1,
      "url": "${url}/uploads/image-name.ext"
    }
  ]
}
Delete
DELETE /products/:id
Response

204 No Response

Categorys

Autenticação Necessaria Header Generation

List
GET /categorys
Response
[
  {
    "id": 10,
    "name": "drink"
  }
]
List One
GET /categorys/:id
Response
{
  "id": 10,
  "name": "drink"
}
Add
PUT /categorys
Input
Name Type
name string
Response
{
  "id": 10,
  "name": "Food"
}
Update
PUT /categorys/:id
Input
Name Type
name string
Response
{
  "id": 10,
  "name": "drink"
}
Delete
DELETE /categorys/:id
Response

204 No Response

Orders

Autenticação Necessaria Header Generation

List
GET /order
Response
[
  {
    "id": 1,
    "value": 24.1,
    "table": 5,
    "items": [
      {
        "id": 1,
        "quantity": 1,
        "description": "Com muito molho",
        "product": {
          "description": "É bom",
          "id": 3,
          "name": "Macarrão",
          "price": 14.5
        }
      },
      {
        "id": 2,
        "quantity": 2,
        "description": "Com Gás",
        "product": {
          "description": "Geladinha",
          "id": 4,
          "name": "Agua mineral",
          "price": 4.8
        }
      }
    ]
  }
]
List One
GET /order/:id
Response
{
  "id": 1,
  "value": 24.1,
  "table": 5,
  "items": [
    {
      "id": 1,
      "quantity": 1,
      "description": "Com muito molho",
      "product": {
        "description": "É bom",
        "id": 3,
        "name": "Macarrão",
        "price": 14.5
      }
    },
    {
      "id": 2,
      "quantity": 2,
      "description": "Com Gás",
      "product": {
        "description": "Geladinha",
        "id": 4,
        "name": "Agua mineral",
        "price": 4.8
      }
    }
  ]
}
Add
PUT /order
Input
{
  "items": [
    {
      "productId": 3,
      "quantity": 1,
      "description": "Com muito molho"
    },
    {
      "productId": 4,
      "quantity": 2,
      "description": "Com Gás"
    }
  ],
  "table": 5
}
Response

204 No Response

Update
PUT /order/:id
Input
{
  "items": [
    {
      "productId": 3,
      "quantity": 1,
      "description": "Com muito molho"
    },
    {
      "productId": 4,
      "quantity": 2,
      "description": "Com Gás"
    }
  ],
  "table": 5
}
Response

204 No Response

Delete
DELETE /order/:id
Response

204 No Response

User

Register
Post /register
Input
{
  "name": "user-batata-${randomNumber}",
  "encryptedPrivateKey": "${encryptedPrivateKey}",
  "publicKey": "${publicKey}"
}

Header generation:

const headers = {
  Authorization: `Basic ${btoa("user:senhaHasheada")}`,
};
Response
{
  "userId": 0,
  "email": "[email protected]",
  "encryptedPrivateKey": "${encryptedPrivateKey}",
  "publicKey": "${publicKey}"
}
Register Admin

Autenticação Necessaria Header Generation

Post /registerAdmin
Input
{
  "name": "user-batata-${randomNumber}",
  "encryptedPrivateKey": "${encryptedPrivateKey}",
  "publicKey": "${publicKey}"
}
Response
{
  "userId": 0,
  "email": "[email protected]",
  "encryptedPrivateKey": "${encryptedPrivateKey}",
  "publicKey": "${publicKey}"
}
Login
GET /login

Header generation:

const headers = {
  Authorization: `Basic ${btoa("user:senhaHasheada")}`,
};
Response
{
  "userId": 0,
  "email": "[email protected]",
  "encryptedPrivateKey": "${encryptedPrivateKey}",
  "publicKey": "${publicKey}"
}

License

MIT © Gu7z