2026-01-12 16:42:08 -03:00
|
|
|
|
// src/modules/watchdog/model/email.model.js
|
|
|
|
|
|
|
|
|
|
|
|
function prepareNotificationPayload(tickets) {
|
|
|
|
|
|
return {
|
|
|
|
|
|
subject: buildSubject(tickets),
|
|
|
|
|
|
bodyEmail: buildBodyEmail(tickets),
|
|
|
|
|
|
recipients: getRecipients(),
|
|
|
|
|
|
cc: getCc()
|
|
|
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function buildSubject(tickets) {
|
|
|
|
|
|
|
|
|
|
|
|
if (tickets.length === 0) {
|
|
|
|
|
|
return '[GOLEIRO] Nenhum chamado foi agarrado';
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return `🧤 [GOLEIRO] ${tickets.length} chamados foram agarrados`;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function buildBodyEmail(tickets) {
|
2026-01-14 17:51:49 -03:00
|
|
|
|
let body = `
|
|
|
|
|
|
<p>🚨 <strong>Atenção!</strong></p>
|
|
|
|
|
|
<p>O goleiro defendeu os seguintes chamados:</p>
|
|
|
|
|
|
<p>Esses chamados foram <strong>fechados no Hubsoft</strong>, mas ainda constam como <strong>abertos no GLPI</strong>.</p>
|
|
|
|
|
|
<br>
|
|
|
|
|
|
<ul>
|
|
|
|
|
|
`;
|
2026-01-12 16:42:08 -03:00
|
|
|
|
|
2026-01-14 17:51:49 -03:00
|
|
|
|
tickets.forEach(ticket => {
|
2026-01-12 16:42:08 -03:00
|
|
|
|
body += `
|
2026-01-14 17:51:49 -03:00
|
|
|
|
<li>
|
|
|
|
|
|
Protocolo Hubsoft: <strong>${ticket.protocolo_hub}</strong><br>
|
|
|
|
|
|
Mundiale ID: <strong>${ticket.ticket_mundiale}</strong><br>
|
|
|
|
|
|
GLPI ID: <strong>${ticket.glpi_ticket_id ?? 'não encontrado'}</strong><br>
|
|
|
|
|
|
Fechado em: ${formatDate(ticket.closed_at)}
|
|
|
|
|
|
</li>
|
|
|
|
|
|
<br>
|
2026-01-12 16:42:08 -03:00
|
|
|
|
`;
|
2026-01-14 17:51:49 -03:00
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
body += `
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
<br>
|
|
|
|
|
|
<p>⚽ Favor verificar e alinhar os status no GLPI.</p>
|
|
|
|
|
|
<p><em>Watchdog Hub × GLPI</em></p>
|
|
|
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
|
|
return body;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function formatDate(value) {
|
|
|
|
|
|
if (!value) return 'não informado';
|
2026-01-12 16:42:08 -03:00
|
|
|
|
|
2026-01-14 17:51:49 -03:00
|
|
|
|
const d = new Date(value);
|
|
|
|
|
|
if (Number.isNaN(d.getTime())) return String(value); // fallback seguro
|
|
|
|
|
|
|
|
|
|
|
|
return d.toLocaleString('pt-BR', { timeZone: 'America/Sao_Paulo' });
|
2026-01-12 16:42:08 -03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
2026-01-14 17:51:49 -03:00
|
|
|
|
|
2026-01-12 16:42:08 -03:00
|
|
|
|
function formatDate(date) {
|
|
|
|
|
|
try {
|
|
|
|
|
|
return new Date(date).toLocaleString('pt-BR');
|
|
|
|
|
|
} catch {
|
|
|
|
|
|
return date;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function getRecipients() {
|
|
|
|
|
|
return process.env.WATCHDOG_RECIPIENT_EMAILS?.split(',') || [];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getCc() {
|
|
|
|
|
|
return process.env.WATCHDOG_CC_EMAILS?.split(',') || [];
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
|
prepareNotificationPayload
|
|
|
|
|
|
};
|