Jul 27 - Update code for scheduled tasks 3
This commit is contained in:
@@ -38,6 +38,27 @@ final class LocalScheduledInspection {
|
||||
var isOverdue: Bool
|
||||
var notes: String?
|
||||
|
||||
/// Set on device the moment an inspection fulfilling this schedule is
|
||||
/// submitted, so the SCHEDULED lists hide the row immediately — online or
|
||||
/// offline — without waiting for the round trip.
|
||||
///
|
||||
/// Purely a display flag. The schedule lifecycle stays server-driven: the
|
||||
/// next successful pull calls `update(from:)`, which clears this and writes
|
||||
/// the authoritative `next_due_date`. If the submission never lands, the
|
||||
/// server still reports the schedule as due and the row simply comes back —
|
||||
/// self-healing.
|
||||
///
|
||||
/// This exists instead of deleting the row. A recurring schedule is
|
||||
/// returned by the server *again* after it rolls forward, so deleting meant
|
||||
/// delete-then-reinsert against an `@Attribute(.unique)` key on every
|
||||
/// completion, and the reinserted row did not reliably carry the new due
|
||||
/// date. Flagging keeps `update(from:)` — the path that has always worked —
|
||||
/// as the only way a cached row's dates ever change.
|
||||
///
|
||||
/// Non-optional with an inline default, so SwiftData migrates lightweight
|
||||
/// (CLAUDE.md rule 12): existing rows read as `false`, no app reinstall.
|
||||
var fulfilledLocally: Bool = false
|
||||
|
||||
/// Manager-authored instructions for this occurrence, normalised.
|
||||
///
|
||||
/// The wire field, the server model attribute and the DB column are all
|
||||
@@ -84,6 +105,7 @@ final class LocalScheduledInspection {
|
||||
self.dueDateString = api.nextDueDate ?? ""
|
||||
self.isOverdue = api.isOverdue
|
||||
self.notes = api.notes
|
||||
self.fulfilledLocally = false
|
||||
self.updatedAt = Date()
|
||||
}
|
||||
|
||||
@@ -98,6 +120,10 @@ final class LocalScheduledInspection {
|
||||
self.dueDateString = api.nextDueDate ?? ""
|
||||
self.isOverdue = api.isOverdue
|
||||
self.notes = api.notes
|
||||
// The server is authoritative. Being returned by the pull at all means
|
||||
// this schedule is live again — for a recurring one, on its NEXT
|
||||
// occurrence — so any local "just did it" flag is stale by definition.
|
||||
self.fulfilledLocally = false
|
||||
self.updatedAt = Date()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user