94 lines
2.9 KiB
JavaScript
94 lines
2.9 KiB
JavaScript
'use strict'
|
|
|
|
const Promotion = require('../models/Promotion')
|
|
|
|
const promotionsController = {
|
|
async getAll(req, res) {
|
|
try {
|
|
const promotions = await Promotion.findAllActive(req.tenant?.id)
|
|
return res.json(promotions)
|
|
} catch (error) {
|
|
return res.status(500).json({ error: 'Erro interno' })
|
|
}
|
|
},
|
|
|
|
async getAllAdmin(req, res) {
|
|
try {
|
|
const promotions = await Promotion.findAll(req.tenant?.id)
|
|
return res.json(promotions)
|
|
} catch (error) {
|
|
return res.status(500).json({ error: 'Erro interno' })
|
|
}
|
|
},
|
|
|
|
async create(req, res) {
|
|
try {
|
|
const { nome, descricao, preco_original, preco_promocional, imagem } = req.body
|
|
if (!nome || !preco_promocional) {
|
|
return res.status(400).json({ error: 'Nome e preço promocional são obrigatórios' })
|
|
}
|
|
const result = await Promotion.create({
|
|
nome,
|
|
descricao,
|
|
preco_original: parseFloat(preco_original) || null,
|
|
preco_promocional: parseFloat(preco_promocional),
|
|
imagem: imagem || '',
|
|
tenant_id: req.tenant?.id || 1,
|
|
})
|
|
return res.json({ success: true, id: result.lastInsertRowid })
|
|
} catch (error) {
|
|
console.error('Erro ao criar promoção:', error)
|
|
return res.status(500).json({ error: 'Erro interno' })
|
|
}
|
|
},
|
|
|
|
async update(req, res) {
|
|
try {
|
|
const { id } = req.params
|
|
const { nome, descricao, preco_original, preco_promocional, imagem, ativo } = req.body
|
|
await Promotion.update(id, {
|
|
nome,
|
|
descricao,
|
|
preco_original: parseFloat(preco_original) || null,
|
|
preco_promocional: parseFloat(preco_promocional),
|
|
imagem: imagem || '',
|
|
ativo: ativo !== undefined ? ativo : true,
|
|
})
|
|
return res.json({ success: true })
|
|
} catch (error) {
|
|
return res.status(500).json({ error: 'Erro interno' })
|
|
}
|
|
},
|
|
|
|
async deletePromotion(req, res) {
|
|
try {
|
|
await Promotion.deleteById(req.params.id)
|
|
return res.json({ success: true })
|
|
} catch (error) {
|
|
return res.status(500).json({ error: 'Erro interno' })
|
|
}
|
|
},
|
|
|
|
// Resumo para o Cérebro do WhatsApp (PROMO-07)
|
|
async getActiveSummary(req, res) {
|
|
try {
|
|
const promos = await Promotion.findAllActive(req.tenant?.id)
|
|
const summary = promos.map(p => ({
|
|
id: p.id,
|
|
nome: p.nome,
|
|
descricao: p.descricao,
|
|
preco_original: p.preco_original,
|
|
preco_promocional: p.preco_promocional,
|
|
desconto_pct: p.preco_original
|
|
? Math.round((1 - p.preco_promocional / p.preco_original) * 100)
|
|
: null,
|
|
}))
|
|
return res.json({ total: summary.length, promocoes: summary })
|
|
} catch (error) {
|
|
return res.status(500).json({ error: 'Erro interno' })
|
|
}
|
|
},
|
|
}
|
|
|
|
module.exports = promotionsController
|