summaryrefslogtreecommitdiff
path: root/internal/handlers/handlers.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/handlers/handlers.go')
-rw-r--r--internal/handlers/handlers.go25
1 files changed, 19 insertions, 6 deletions
diff --git a/internal/handlers/handlers.go b/internal/handlers/handlers.go
index d1a7512..0d8b2da 100644
--- a/internal/handlers/handlers.go
+++ b/internal/handlers/handlers.go
@@ -314,9 +314,20 @@ func (h *Handler) fetchCalendarEvents(ctx context.Context, forceRefresh bool) ([
}
if len(enabledIDs) == 0 {
- // No source_configs synced yet — fall back to the configured calendar ID
+ // No source_configs synced yet — fall back to the configured calendar
+ // ID(s). GoogleCalendarID is a single env var that itself holds a
+ // comma-separated list (see GOOGLE_CALENDAR_ID in .env) -- it must be
+ // split before use. Passing the raw joined string straight through
+ // as a single calendar ID (the previous behavior) sends Google's API
+ // a calendarId that matches nothing, failing every fetch with a 404 —
+ // this is a real production incident, not a hypothetical: it silently
+ // broke all calendar events (web and widget both) until fixed.
if len(configs) == 0 && h.config.GoogleCalendarID != "" {
- enabledIDs = []string{h.config.GoogleCalendarID}
+ for _, id := range strings.Split(h.config.GoogleCalendarID, ",") {
+ if trimmed := strings.TrimSpace(id); trimmed != "" {
+ enabledIDs = append(enabledIDs, trimmed)
+ }
+ }
} else {
// Configs exist but all disabled — respect that
return nil, nil
@@ -326,10 +337,12 @@ func (h *Handler) fetchCalendarEvents(ctx context.Context, forceRefresh bool) ([
h.googleCalendarClient.SetCalendarIDs(enabledIDs)
fetcher := &CacheFetcher[models.CalendarEvent]{
- Store: h.store,
- CacheKey: store.CacheKeyGoogleCalendar,
- TTLMinutes: h.config.CacheTTLMinutes,
- Fetch: func(ctx context.Context) ([]models.CalendarEvent, error) { return h.googleCalendarClient.GetUpcomingEvents(ctx, 50) },
+ Store: h.store,
+ CacheKey: store.CacheKeyGoogleCalendar,
+ TTLMinutes: h.config.CacheTTLMinutes,
+ Fetch: func(ctx context.Context) ([]models.CalendarEvent, error) {
+ return h.googleCalendarClient.GetUpcomingEvents(ctx, 50)
+ },
GetFromCache: h.store.GetCalendarEvents,
SaveToCache: h.store.SaveCalendarEvents,
}