snglpi/src/models/syncControlModel.js

38 lines
1.4 KiB
JavaScript
Raw Normal View History

// src/models/syncControlModel.js
const pool = require('../data/database');
const { logError, logInfo } = require('../utils/logger');
class SyncControlModel {
static async getWatermark(systemName) {
try {
const query = 'SELECT last_watermark FROM sync_control WHERE system_name = $1';
const { rows } = await pool.query(query, [systemName]);
if (rows.length === 0) {
throw new Error(`Watermark para o sistema '${systemName}' não encontrada no banco de dados.`);
}
// Retorna no formato que o ServiceNow espera: 'YYYY-MM-DD HH:MM:SS'
return rows[0].last_watermark.toISOString().replace('T', ' ').substring(0, 19);
} catch (error) {
logError(error, `Erro ao buscar watermark para ${systemName}`);
throw error;
}
}
static async setWatermark(systemName, watermark) {
try {
const query = `
UPDATE sync_control
SET last_watermark = $1, last_run_at = NOW(), last_run_status = 'success'
WHERE system_name = $2
`;
await pool.query(query, [watermark, systemName]);
logInfo(`🌊 Nova marca d'água para '${systemName}' definida para: ${watermark}`);
} catch (error) {
logError(error, `Erro ao definir watermark para ${systemName}`);
throw error;
}
}
}
module.exports = SyncControlModel;