75 lines
2.2 KiB
JavaScript
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
|