diff --git a/blueprints/sync_server.py b/blueprints/sync_server.py index 6cb466d..c4c6468 100644 --- a/blueprints/sync_server.py +++ b/blueprints/sync_server.py @@ -34,6 +34,16 @@ def sync_push(): for d in data.get('deletions', []): et = d['entity_type'] eu = d['entity_uuid'] + # Log to server's sync_deletions so other pulling clients see it + existing = conn.execute( + "SELECT id FROM sync_deletions WHERE entity_type = ? AND entity_uuid = ?", + (et, eu) + ).fetchone() + if not existing: + conn.execute( + "INSERT INTO sync_deletions (entity_type, entity_uuid, deleted_at) VALUES (?, ?, ?)", + (et, eu, synced_at) + ) if et == 'debtor': conn.execute("DELETE FROM debtors WHERE uuid = ?", (eu,)) elif et == 'ticket': diff --git a/core/sync.py b/core/sync.py index 607c2b1..3038bcd 100644 --- a/core/sync.py +++ b/core/sync.py @@ -113,8 +113,9 @@ class SyncManager: # Expenses (immutable, synced_at IS NULL) expenses = conn.execute( - "SELECT uuid, date, description, amount FROM expenses WHERE synced_at IS NULL" + "SELECT id, uuid, date, description, amount FROM expenses WHERE synced_at IS NULL" ).fetchall() + expense_ids = [e[0] for e in expenses] # Deletions (immutable, synced_at IS NULL) deletions = conn.execute( @@ -140,7 +141,7 @@ class SyncManager: ], "tickets": ticket_payloads, "expenses": [ - {"uuid": e[0], "date": e[1], "description": e[2], "amount": e[3]} + {"uuid": e[1], "date": e[2], "description": e[3], "amount": e[4]} for e in expenses ], "deletions": [ @@ -162,6 +163,11 @@ class SyncManager: "UPDATE sales SET synced_at = ? WHERE id = ?", [(now, sid) for sid in sale_ids] ) + if expense_ids: + conn.executemany( + "UPDATE expenses SET synced_at = ? WHERE id = ?", + [(now, eid) for eid in expense_ids] + ) if deletions: conn.executemany( "UPDATE sync_deletions SET synced_at = ? WHERE entity_type = ? AND entity_uuid = ?",