Files
mercado.clube67.com/backend/controllers/inboxController.js
T

97 lines
3.1 KiB
JavaScript

'use strict'
const MensagemInterna = require('../models/MensagemInterna')
const SETORES_VALIDOS = ['geral','atendimento','cotacao','separacao','embalagem','auditoria','fiscal','expedicao','financeiro','suporte']
const inboxController = {
// INB-01 — Lista mensagens de um setor
async listBySetor(req, res) {
try {
const { setor } = req.params
if (!SETORES_VALIDOS.includes(setor)) return res.status(400).json({ error: 'Setor inválido' })
const somenteNaoLidas = req.query.nao_lidas === 'true'
const rows = await MensagemInterna.listBySetor(req.tenant.id, setor, somenteNaoLidas)
res.json(rows)
} catch (err) {
res.status(500).json({ error: 'Erro ao listar inbox' })
}
},
// INB-02 — Lista mensagens de um pedido
async listByPedido(req, res) {
try {
const rows = await MensagemInterna.listByPedido(req.params.pedidoId)
res.json(rows)
} catch (err) {
res.status(500).json({ error: 'Erro ao listar mensagens do pedido' })
}
},
// INB-02 — Envia mensagem interna (setor + pedido opcional)
async enviar(req, res) {
try {
const { pedido_id, setor, mensagem } = req.body
if (!setor || !mensagem) return res.status(400).json({ error: 'setor e mensagem são obrigatórios' })
if (!SETORES_VALIDOS.includes(setor)) return res.status(400).json({ error: 'Setor inválido' })
const remetente = req.user?.nome || req.user?.email || 'Sistema'
const result = await MensagemInterna.create({
tenantId: req.tenant.id,
pedidoId: pedido_id || null,
setor,
remetente,
mensagem,
})
res.status(201).json({ ok: true, id: result.id })
} catch (err) {
console.error('[inbox.enviar]', err.message)
res.status(500).json({ error: 'Erro ao enviar mensagem' })
}
},
// INB-03 — Badge: contagem de não lidas por setor
async contadores(req, res) {
try {
const rows = await MensagemInterna.contadorNaoLidas(req.tenant.id)
const total = await MensagemInterna.totalNaoLidas(req.tenant.id)
res.json({ total: Number(total?.total ?? 0), por_setor: rows })
} catch (err) {
res.status(500).json({ error: 'Erro ao buscar contadores' })
}
},
// Marcar lida
async marcarLida(req, res) {
try {
await MensagemInterna.marcarLida(req.params.id)
res.json({ ok: true })
} catch (err) {
res.status(500).json({ error: 'Erro ao marcar lida' })
}
},
// Marcar todas lidas de um pedido
async marcarTodasPedido(req, res) {
try {
await MensagemInterna.marcarTodasLidasPorPedido(req.params.pedidoId)
res.json({ ok: true })
} catch (err) {
res.status(500).json({ error: 'Erro ao marcar lidas' })
}
},
// Marcar todas lidas de um setor
async marcarTodasSetor(req, res) {
try {
const { setor } = req.params
await MensagemInterna.marcarTodasLidasPorSetor(req.tenant.id, setor)
res.json({ ok: true })
} catch (err) {
res.status(500).json({ error: 'Erro ao marcar lidas' })
}
},
}
module.exports = inboxController