38 lines
1.4 KiB
JavaScript
38 lines
1.4 KiB
JavaScript
|
|
// 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;
|