diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-02-17 14:43:42 -1000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-02-17 14:43:42 -1000 |
| commit | ec7d895c00c571b37ad9255b99b2e1756776c9e1 (patch) | |
| tree | 31f8a925375fd5b00ee5febfe5d83f35487b1dd3 /internal/handlers/timeline.go | |
| parent | 44fa97ce901bbfc5957e6d9ba90a53086bb5950b (diff) | |
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 <noreply@anthropic.com>
Diffstat (limited to 'internal/handlers/timeline.go')
| -rw-r--r-- | internal/handlers/timeline.go | 8 |
1 files changed, 7 insertions, 1 deletions
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 |
