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.
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.
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.
Para logar, o Front deve mandar um header com authenticação "Basic" enviando o email e o hash da senha.
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
const token = jwt.sign({ email }, privateKey, { algorithm: "RS256" });
const headers = {
Authorization: `Bearer ${token}`,
"X-User-Email": email,
};
Admin Auth
User Auth
Autenticação Necessaria Header Generation
GET /products
[
{
"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"
}
]
}
]
GET /products/:id
{
"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"
}
]
}
PUT /products
Name | Type |
---|---|
name |
string |
description |
string |
price |
number |
quantity |
number |
category |
number |
image |
file |
Category need to exist
{
"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"
}
]
}
PUT /products/:id
Name | Type |
---|---|
name |
string |
description |
string |
price |
number |
quantity |
number |
category |
number |
image |
file |
Category need to exist
{
"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 /products/:id
204 No Response
Autenticação Necessaria Header Generation
GET /categorys
[
{
"id": 10,
"name": "drink"
}
]
GET /categorys/:id
{
"id": 10,
"name": "drink"
}
PUT /categorys
Name | Type |
---|---|
name |
string |
{
"id": 10,
"name": "Food"
}
PUT /categorys/:id
Name | Type |
---|---|
name |
string |
{
"id": 10,
"name": "drink"
}
DELETE /categorys/:id
204 No Response
Autenticação Necessaria Header Generation
GET /order
[
{
"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
}
}
]
}
]
GET /order/:id
{
"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
}
}
]
}
PUT /order
{
"items": [
{
"productId": 3,
"quantity": 1,
"description": "Com muito molho"
},
{
"productId": 4,
"quantity": 2,
"description": "Com Gás"
}
],
"table": 5
}
204 No Response
PUT /order/:id
{
"items": [
{
"productId": 3,
"quantity": 1,
"description": "Com muito molho"
},
{
"productId": 4,
"quantity": 2,
"description": "Com Gás"
}
],
"table": 5
}
204 No Response
DELETE /order/:id
204 No Response
Post /register
{
"name": "user-batata-${randomNumber}",
"encryptedPrivateKey": "${encryptedPrivateKey}",
"publicKey": "${publicKey}"
}
Header generation:
const headers = {
Authorization: `Basic ${btoa("user:senhaHasheada")}`,
};
{
"userId": 0,
"email": "[email protected]",
"encryptedPrivateKey": "${encryptedPrivateKey}",
"publicKey": "${publicKey}"
}
Autenticação Necessaria Header Generation
Post /registerAdmin
{
"name": "user-batata-${randomNumber}",
"encryptedPrivateKey": "${encryptedPrivateKey}",
"publicKey": "${publicKey}"
}
{
"userId": 0,
"email": "[email protected]",
"encryptedPrivateKey": "${encryptedPrivateKey}",
"publicKey": "${publicKey}"
}
GET /login
Header generation:
const headers = {
Authorization: `Basic ${btoa("user:senhaHasheada")}`,
};
{
"userId": 0,
"email": "[email protected]",
"encryptedPrivateKey": "${encryptedPrivateKey}",
"publicKey": "${publicKey}"
}
MIT © Gu7z