Forget pushed event ids when another calendar is chosen (Feature 16)
Choosing a calendar other than the stored one now clears every plan day's calendar_event_id and edits each plan that had one (revision raised, synced -> changed) in the same transaction as the choice, so a stored event id is always on the chosen calendar and the next push writes the whole week there. PushEvents now runs the push's record under the same account-lock hold as its event writes, so the chosen calendar cannot change between the writes and the sync bookkeeping; a push that read a plan before the choice is refused by its revision check (ErrPlanChanged). Fixes review finding F-01 on task 5885d2b1-cf06-44ff-abf3-242d7763c3c9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -58,6 +58,26 @@ UPDATE week_plans
|
||||
SET status = 'synced', calendar_synced_at = ?, updated_at = ?
|
||||
WHERE id = ? AND revision = ?;
|
||||
|
||||
-- name: MarkCalendarPlansEdited :exec
|
||||
-- Records that Calendar no longer shows the days with a calendar event id
|
||||
-- as planned, since another calendar is chosen: every plan with such a day
|
||||
-- is edited as MarkWeekPlanEdited does, so a synced plan becomes changed
|
||||
-- and a push that read it before is refused.
|
||||
UPDATE week_plans
|
||||
SET status = CASE WHEN status = 'synced' THEN 'changed' ELSE status END,
|
||||
revision = revision + 1,
|
||||
updated_at = ?
|
||||
WHERE EXISTS (
|
||||
SELECT 1 FROM plan_days
|
||||
WHERE plan_days.plan_id = week_plans.id AND plan_days.calendar_event_id IS NOT NULL
|
||||
);
|
||||
|
||||
-- name: ClearCalendarEvents :exec
|
||||
-- Clears every day's calendar event id: none is on the chosen calendar.
|
||||
UPDATE plan_days
|
||||
SET calendar_event_id = NULL, updated_at = ?
|
||||
WHERE calendar_event_id IS NOT NULL;
|
||||
|
||||
-- name: MarkWeekPlanEdited :exec
|
||||
-- Records an edit of plan id, raising its revision: a synced plan becomes
|
||||
-- changed, any other keeps its status.
|
||||
|
||||
Reference in New Issue
Block a user