Files
mercado.clube67.com/backend/controllers/promotionsController.js
T

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