From 5dd2562c4d28e93dd690a3cf5c0837717a7e797f Mon Sep 17 00:00:00 2001 From: Sarthak Agrawal Date: Sat, 22 Aug 2026 00:18:08 +0530 Subject: [PATCH] feat: publish complete relationship history --- ios/Kith.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/swiftpm/Package.resolved | 2 +- ios/Sources/Kith/AppModel.swift | 36 +++++++++++++++++++ ios/project.yml | 2 +- 4 files changed, 39 insertions(+), 3 deletions(-) diff --git a/ios/Kith.xcodeproj/project.pbxproj b/ios/Kith.xcodeproj/project.pbxproj index b0875fc..46eacdf 100644 --- a/ios/Kith.xcodeproj/project.pbxproj +++ b/ios/Kith.xcodeproj/project.pbxproj @@ -775,7 +775,7 @@ repositoryURL = "https://github.com/Significant-Hobbies/personal-platform.git"; requirement = { kind = revision; - revision = a254f77f883e0ff3a85841ea9620754875a21666; + revision = 55176cac008d3857ef815d9bc5c8e74b68e7c3f3; }; }; /* End XCRemoteSwiftPackageReference section */ diff --git a/ios/Kith.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ios/Kith.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index a4f2b05..364ef03 100644 --- a/ios/Kith.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ios/Kith.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -6,7 +6,7 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/Significant-Hobbies/personal-platform.git", "state" : { - "revision" : "a254f77f883e0ff3a85841ea9620754875a21666" + "revision" : "55176cac008d3857ef815d9bc5c8e74b68e7c3f3" } } ], diff --git a/ios/Sources/Kith/AppModel.swift b/ios/Sources/Kith/AppModel.swift index 120e615..0890bbc 100644 --- a/ios/Sources/Kith/AppModel.swift +++ b/ios/Sources/Kith/AppModel.swift @@ -108,9 +108,11 @@ final class AppModel { } func deletePerson(id: UUID) { + let deletedIDs = [id] + document.entries.filter { $0.personID == id }.map(\.id) document.removePerson(id: id) if selectedPersonID == id { selectedPersonID = nil } persist() + enqueueDeletions(deletedIDs) } func addEntry(_ entry: Entry) { @@ -126,6 +128,7 @@ final class AppModel { func deleteEntry(id: UUID) { document.removeEntry(id: id) persist() + enqueueDeletions([id]) } private func persist() { @@ -149,6 +152,7 @@ final class AppModel { func syncFromPlatform() async { guard let platform else { return } do { + try await enqueueLocalRecords(using: platform) let changes = try await platform.sync.synchronize() guard !changes.isEmpty else { return } for change in changes { apply(change) } @@ -158,6 +162,38 @@ final class AppModel { } } + private func enqueueLocalRecords(using platform: PersonalPlatformConnection) async throws { + for person in document.people { + try await platform.sync.enqueue( + recordId: person.id.uuidString.lowercased(), + occurredAt: KithPlatformRecord.iso(person.updatedAt), + record: KithPlatformRecord.person(person) + ) + } + for entry in document.entries { + guard let person = document.person(id: entry.personID) else { continue } + try await platform.sync.enqueue( + recordId: entry.id.uuidString.lowercased(), + occurredAt: KithPlatformRecord.iso(entry.happenedOn), + record: KithPlatformRecord.interaction(entry, person: person) + ) + } + } + + private func enqueueDeletions(_ ids: [UUID]) { + guard let platform, !ids.isEmpty else { return } + Task { + for id in ids { + try? await platform.sync.enqueue( + recordId: id.uuidString.lowercased(), + operation: .delete, + occurredAt: KithPlatformRecord.iso(.now) + ) + } + _ = try? await platform.sync.synchronize() + } + } + private func enqueue(_ person: Person) { guard let platform else { return } Task { diff --git a/ios/project.yml b/ios/project.yml index 95001da..8d96681 100644 --- a/ios/project.yml +++ b/ios/project.yml @@ -21,7 +21,7 @@ settings: packages: PersonalSyncKit: url: https://github.com/Significant-Hobbies/personal-platform.git - revision: a254f77f883e0ff3a85841ea9620754875a21666 + revision: 55176cac008d3857ef815d9bc5c8e74b68e7c3f3 targets: KithCore: type: framework