Files
mercado.clube67.com/backend/models/CotacaoFlashPromo.js
T

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