From ec7d895c00c571b37ad9255b99b2e1756776c9e1 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Tue, 17 Feb 2026 14:43:42 -1000 Subject: Add calendar cache layer, incremental sync tests, completion assertions - Google Calendar events now cached via CacheFetcher pattern with stale-cache fallback on API errors (new migration 015, store methods, fetchCalendarEvents handler, BuildTimeline reads from store) - Todoist incremental sync path covered by 5 new tests - Task completion tests assert response body, headers, and template data Co-Authored-By: Claude Opus 4.6 --- internal/handlers/timeline.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'internal/handlers/timeline.go') diff --git a/internal/handlers/timeline.go b/internal/handlers/timeline.go index 29b156a..86b89ea 100644 --- a/internal/handlers/timeline.go +++ b/internal/handlers/timeline.go @@ -1,6 +1,7 @@ package handlers import ( + "log" "net/http" "strconv" "time" @@ -63,8 +64,13 @@ func (h *Handler) HandleTimeline(w http.ResponseWriter, r *http.Request) { end := start.AddDate(0, 0, days) + // Refresh calendar events cache before building timeline + if _, err := h.fetchCalendarEvents(r.Context(), false); err != nil { + log.Printf("Warning: failed to fetch calendar events: %v", err) + } + // Call BuildTimeline - items, err := BuildTimeline(r.Context(), h.store, h.googleCalendarClient, h.googleTasksClient, start, end) + items, err := BuildTimeline(r.Context(), h.store, h.googleTasksClient, start, end) if err != nil { JSONError(w, http.StatusInternalServerError, "Failed to build timeline", err) return -- cgit v1.2.3