Cursos / Informática para Internet / Plataformas de aplicações Web / Aula
Conteúdo:
var express = require('express');
var router = express.Router();
const requireJWT = require('../../middlewares/requireJWT');
const knexConfig = require('../../knexfile');
const knex = require('knex')(knexConfig);
// Obtém uma venda (sale) através de seu id.
router.get('/:sale_id', [requireJWT], async (req, res) => {
// obtem o token JWT decodificado pelo middleware requireJWT
const jwt = res.locals.jwt;
// Só permite que funcionários(employee) usem essa rota
if (!jwt.employee) {
return res.status(401).json({
message: 'Não é funcionário'
});
}
// Busca uma venda (sale) através do ID passado.
const sale = await knex.table('sales').where('sales.id', '=', req.params.sale_id).first();
// busca todos os items da venda encontrada
sale.items = await knex.table('items').where('sale_id', '=', sale.id);
// para cada item da venda, buscar o produto desse item
for (const item of sale.items) {
item.product = await knex.table('products').where('id', '=', item.product_id).first();
}
//retorna os dados da venda, já com os itens e produtos
res.json({ sale });
});
// cria uma nova venda.
// pode ser chamado por um funcionaŕio no PDV ou por um client ena loja online
router.post('/', [requireJWT], async (req, res) => {
// obtem o token JWT decodificado pelo middleware requireJWT
const jwt = res.locals.jwt;
let sale = {};
// Uma venda pode ser criada por um funcionário ou um cliente. O token JWT tem a informação se ele é de um client ou employee
// caso seja por um funcionário:
if (jwt.employee) {
// então a venda a ser criada recebe o id do cliente escolhido no PDV, além do id do funcionário (employee) que está criando a venda
sale.client_id = req.body.client_id;
sale.employee_id = jwt.employee.id;
} else if (jwt.client) {
// caso seja um cliente, veio da loja on-line, então não existe funcionário envolvido.
// nesse caso o id do cliente é o id que está no token JWT dele, já que ele mesmo criou a venda para ele mesmo pela loja (fez uma compra).
sale.client_id = jwt.client.id;
// e o ID do employee deve ser nulo, pois não existe funcionário envolvido no processo.
sale.employee_id = null;
} else {
return res.status(401).json({
message: 'Não é cliente nem funcionário'
})
}
// insere e venda no banco
const result = await knex.table('sales').insert(sale);
// o id da venda inserida é o primeiro item do result (array), de acordo com o padrão do knex
sale.id = result[0];
// Com a venda já inserido podemos agora inserir no banco os items na venda criada
const items = [];
// é passado um array de produtos que são os itens da venda no PDV ou compra no site on-line
// para cada um desses productIDs, criar noco elemento no array items com o ID da venda e o ID do produto.
for (const productID of req.body.productIDs) {
items.push({
sale_id: sale.id,
product_id: productID
});
}
// Inserir todos os itens do array no banco de dados
await knex.table('items').insert(items);
// retornar a venda criada como JSON
res.json({ sale });
});
module.exports = router;
São apenas duas rotas aqui, uma para se buscar uma venda(sale) do banco e a outra para se criar uma nova venda.
Todos os detalhes de implementação estão comentados no código e servem como explicação de cada comando.
Repare que a rota de criação de uma venda pode ser executada por um usuário do tipo employee ou client. Isso é determinado e verificado pelo seu token JWT.
No caso de um employee criando a venda, então é uma venda de balcão pelo PDV e deve ser utilizado o clientID passado para a API para se criar a venda. Caso seja uma venda criada por um cliente, então se trata de uma compra pela loja virtual e então o clientID utilizado nessa venda é o do usuário (client) logado, ou seja, o clientID é obtido a partir do token JWT.
Versão 5.3 - Todos os Direitos reservados