feat: 为 G5 room_status 写入添加强制 online_status 为 1 的功能,并确保冲突时始终更新,即使业务字段未变化
This commit is contained in:
@@ -589,12 +589,47 @@ describe('DatabaseManager: room_status upsert SQL', () => {
|
||||
includeGuid: false,
|
||||
autoCreatePartitions: false,
|
||||
tableRef: 'room_status.room_status_moment_g5',
|
||||
forceOnlineStatusOnWrite: true,
|
||||
forceUpdateOnConflict: true,
|
||||
logPrefix: 'upsertRoomStatusG5',
|
||||
});
|
||||
assert.match(built.sql, /ON CONFLICT \(hotel_id, room_id\)/);
|
||||
assert.doesNotMatch(built.sql, /ts_ms = EXCLUDED\.ts_ms/);
|
||||
assert.equal(/guid/.test(built.sql), false);
|
||||
});
|
||||
|
||||
it('forces online_status to 1 for g5 room_status insert and update', () => {
|
||||
const dm = new DatabaseManager({ host: 'x', port: 5432, user: 'x', password: 'x', database: 'x', roomStatusTable: 'room_status.room_status_moment_g5' });
|
||||
const built = dm._buildRoomStatusUpsertQuery([buildBasePayload()], {
|
||||
tableName: 'room_status.room_status_moment_g5',
|
||||
conflictColumns: ['hotel_id', 'room_id'],
|
||||
includeGuid: false,
|
||||
autoCreatePartitions: false,
|
||||
tableRef: 'room_status.room_status_moment_g5',
|
||||
forceOnlineStatusOnWrite: true,
|
||||
forceUpdateOnConflict: true,
|
||||
logPrefix: 'upsertRoomStatusG5',
|
||||
});
|
||||
assert.match(built.sql, /INSERT INTO room_status\.room_status_moment_g5 \(.*online_status\)/s);
|
||||
assert.match(built.sql, /online_status = 1/);
|
||||
assert.equal(built.values[built.values.length - 1], 1);
|
||||
});
|
||||
|
||||
it('always updates g5 room_status on conflict even when business fields are unchanged', () => {
|
||||
const dm = new DatabaseManager({ host: 'x', port: 5432, user: 'x', password: 'x', database: 'x', roomStatusTable: 'room_status.room_status_moment_g5' });
|
||||
const built = dm._buildRoomStatusUpsertQuery([buildBasePayload()], {
|
||||
tableName: 'room_status.room_status_moment_g5',
|
||||
conflictColumns: ['hotel_id', 'room_id'],
|
||||
includeGuid: false,
|
||||
autoCreatePartitions: false,
|
||||
tableRef: 'room_status.room_status_moment_g5',
|
||||
forceOnlineStatusOnWrite: true,
|
||||
forceUpdateOnConflict: true,
|
||||
logPrefix: 'upsertRoomStatusG5',
|
||||
});
|
||||
assert.doesNotMatch(built.sql, /room_status\.room_status_moment_g5\.ts_ms <= EXCLUDED\.ts_ms/);
|
||||
assert.doesNotMatch(built.sql, /IS DISTINCT FROM EXCLUDED/);
|
||||
});
|
||||
});
|
||||
|
||||
describe('DatabaseManager: insertHeartbeatEventsDual', () => {
|
||||
|
||||
Reference in New Issue
Block a user