added new and old to changes and pg notify

This commit is contained in:
2026-03-20 01:59:48 -04:00
parent 31519e8447
commit fcd8310ed8
2 changed files with 355 additions and 218 deletions

View File

@ -694,7 +694,8 @@ impl Merger {
let id_str = entity_fields.get("id").unwrap();
let type_name = entity_fields.get("type").unwrap();
let mut changes = serde_json::Map::new();
let mut old_vals = serde_json::Map::new();
let mut new_vals = serde_json::Map::new();
let is_update = change_kind == "update" || change_kind == "delete";
if !is_update {
@ -707,7 +708,7 @@ impl Merger {
];
for (k, v) in entity_fields {
if !system_keys.contains(k) {
changes.insert(k.clone(), v.clone());
new_vals.insert(k.clone(), v.clone());
}
}
} else {
@ -724,12 +725,13 @@ impl Merger {
if let Some(fetched) = entity_fetched {
let old_val = fetched.get(k).unwrap_or(&Value::Null);
if v != old_val {
changes.insert(k.clone(), v.clone());
new_vals.insert(k.clone(), v.clone());
old_vals.insert(k.clone(), old_val.clone());
}
}
}
}
changes.insert("type".to_string(), type_name.clone());
new_vals.insert("type".to_string(), type_name.clone());
}
let mut complete = entity_fields.clone();
@ -743,15 +745,25 @@ impl Merger {
}
}
let new_val_obj = Value::Object(new_vals);
let old_val_obj = if old_vals.is_empty() {
Value::Null
} else {
Value::Object(old_vals)
};
let mut notification = serde_json::Map::new();
notification.insert("complete".to_string(), Value::Object(complete));
if is_update {
notification.insert("changes".to_string(), Value::Object(changes.clone()));
notification.insert("new".to_string(), new_val_obj.clone());
if old_val_obj != Value::Null {
notification.insert("old".to_string(), old_val_obj.clone());
}
let change_sql = format!(
"INSERT INTO agreego.change (changes, entity_id, id, kind, modified_at, modified_by) VALUES ({}, {}, {}, {}, {}, {})",
Self::quote_literal(&Value::Object(changes)),
"INSERT INTO agreego.change (\"old\", \"new\", entity_id, id, kind, modified_at, modified_by) VALUES ({}, {}, {}, {}, {}, {}, {})",
Self::quote_literal(&old_val_obj),
Self::quote_literal(&new_val_obj),
Self::quote_literal(id_str),
Self::quote_literal(&Value::String(uuid::Uuid::new_v4().to_string())),
Self::quote_literal(&Value::String(change_kind.to_string())),