49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
'use strict'
|
|
|
|
const { execute, queryOne, query } = require('../database/postgres')
|
|
|
|
class CotacaoFlashPromo {
|
|
// Retorna promoção relâmpago ativa agora (com dados do produto se vinculado)
|
|
static getActive(tenantId = 1) {
|
|
return queryOne(
|
|
`SELECT cfp.*, p.nome AS produto_nome, p.sku AS produto_sku, p.preco AS produto_preco
|
|
FROM cotacao_flash_promos cfp
|
|
LEFT JOIN produtos p ON p.id = cfp.produto_id
|
|
WHERE cfp.tenant_id = $1 AND cfp.ativo = TRUE
|
|
AND cfp.starts_at <= NOW() AND cfp.ends_at > NOW()
|
|
ORDER BY cfp.ends_at ASC
|
|
LIMIT 1`,
|
|
[tenantId]
|
|
)
|
|
}
|
|
|
|
// Lista todas as flash promos (admin)
|
|
static list(tenantId = 1) {
|
|
return query(
|
|
`SELECT cfp.*, p.nome AS produto_nome
|
|
FROM cotacao_flash_promos cfp
|
|
LEFT JOIN produtos p ON p.id = cfp.produto_id
|
|
WHERE cfp.tenant_id = $1
|
|
ORDER BY cfp.created_at DESC LIMIT 50`,
|
|
[tenantId]
|
|
)
|
|
}
|
|
|
|
// Cria nova flash promo
|
|
static create({ tenantId = 1, produtoId, discount_pct, label, duration_minutes }) {
|
|
return execute(
|
|
`INSERT INTO cotacao_flash_promos (tenant_id, produto_id, discount_pct, label, ends_at)
|
|
VALUES ($1, $2, $3, $4, NOW() + ($5 * INTERVAL '1 minute'))
|
|
RETURNING *`,
|
|
[tenantId, produtoId || null, parseFloat(discount_pct), label || 'Promoção Relâmpago', parseInt(duration_minutes)]
|
|
)
|
|
}
|
|
|
|
// Encerra uma flash promo
|
|
static cancel(id) {
|
|
return execute(`UPDATE cotacao_flash_promos SET ativo=FALSE, ends_at=NOW() WHERE id=$1`, [id])
|
|
}
|
|
}
|
|
|
|
module.exports = CotacaoFlashPromo
|