feat: initial project structure (Model Project) - Backend + Multi-Frontend + Docker
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
'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
|
||||
Reference in New Issue
Block a user