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

75 lines
2.2 KiB
JavaScript

'use strict'
const { execute, queryOne, query } = require('../database/postgres')
class MensagemInterna {
// Lista mensagens de um pedido (ou de um setor, sem pedido)
static listByPedido(pedidoId) {
return query(
`SELECT * FROM mensagens_internas WHERE pedido_id = $1 ORDER BY created_at ASC`,
[pedidoId]
)
}
// Lista mensagens de um setor (inbox do setor) — apenas não lidas, ou todas
static listBySetor(tenantId, setor, somenteNaoLidas = false) {
const cond = somenteNaoLidas ? 'AND lida = FALSE' : ''
return query(
`SELECT mi.*, p.id AS pid, p.status AS pedido_status, p.total AS pedido_total
FROM mensagens_internas mi
LEFT JOIN pedidos p ON p.id = mi.pedido_id
WHERE mi.tenant_id = $1 AND mi.setor = $2 ${cond}
ORDER BY mi.created_at DESC
LIMIT 100`,
[tenantId, setor]
)
}
// Contagem de não lidas por setor
static contadorNaoLidas(tenantId) {
return query(
`SELECT setor, COUNT(*) AS total
FROM mensagens_internas
WHERE tenant_id = $1 AND lida = FALSE
GROUP BY setor
ORDER BY setor`,
[tenantId]
)
}
// Total de não lidas (para badge geral)
static totalNaoLidas(tenantId) {
return queryOne(
`SELECT COUNT(*) AS total FROM mensagens_internas WHERE tenant_id = $1 AND lida = FALSE`,
[tenantId]
)
}
// Envia mensagem
static create({ tenantId, pedidoId, setor, remetente, mensagem }) {
return execute(
`INSERT INTO mensagens_internas (tenant_id, pedido_id, setor, remetente, mensagem)
VALUES ($1, $2, $3, $4, $5) RETURNING id`,
[tenantId, pedidoId || null, setor || 'geral', remetente, mensagem]
)
}
// Marcar como lida (uma ou todas de um pedido)
static marcarLida(id) {
return execute(`UPDATE mensagens_internas SET lida = TRUE WHERE id = $1`, [id])
}
static marcarTodasLidasPorPedido(pedidoId) {
return execute(`UPDATE mensagens_internas SET lida = TRUE WHERE pedido_id = $1`, [pedidoId])
}
static marcarTodasLidasPorSetor(tenantId, setor) {
return execute(
`UPDATE mensagens_internas SET lida = TRUE WHERE tenant_id = $1 AND setor = $2 AND lida = FALSE`,
[tenantId, setor]
)
}
}
module.exports = MensagemInterna