From e97a1bc259d3aa91956ec73a522421cdb621ae57 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Thu, 22 Jan 2026 15:28:06 -1000 Subject: Add Google Calendar integration - Add GoogleCalendarClient for fetching upcoming events - Add GoogleCalendarAPI interface and CalendarEvent model - Add config for GOOGLE_CREDENTIALS_FILE and GOOGLE_CALENDAR_ID - Display events in Planning tab with date/time formatting - Update handlers and tests to support optional calendar client Config env vars: - GOOGLE_CREDENTIALS_FILE: Path to service account JSON - GOOGLE_CALENDAR_ID: Calendar ID (defaults to "primary") Co-Authored-By: Claude Opus 4.5 --- cmd/dashboard/main.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'cmd/dashboard/main.go') diff --git a/cmd/dashboard/main.go b/cmd/dashboard/main.go index fd2c024..3d8b330 100644 --- a/cmd/dashboard/main.go +++ b/cmd/dashboard/main.go @@ -83,9 +83,18 @@ func main() { planToEatClient = api.NewPlanToEatClient(cfg.PlanToEatAPIKey) } + var googleCalendarClient api.GoogleCalendarAPI + if cfg.HasGoogleCalendar() { + var err error + googleCalendarClient, err = api.NewGoogleCalendarClient(context.Background(), cfg.GoogleCredentialsFile, cfg.GoogleCalendarID) + if err != nil { + log.Printf("Warning: failed to initialize Google Calendar client: %v", err) + } + } + // Initialize handlers - h := handlers.New(db, todoistClient, trelloClient, planToEatClient, cfg) - tabsHandler := handlers.NewTabsHandler(db, cfg.TemplateDir) + h := handlers.New(db, todoistClient, trelloClient, planToEatClient, googleCalendarClient, cfg) + tabsHandler := handlers.NewTabsHandler(db, googleCalendarClient, cfg.TemplateDir) // Set up router r := chi.NewRouter() @@ -94,7 +103,7 @@ func main() { r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.Timeout(60 * time.Second)) - r.Use(sessionManager.LoadAndSave) // Session middleware must be applied globally + r.Use(sessionManager.LoadAndSave) // Session middleware must be applied globally r.Use(authHandlers.Middleware().CSRFProtect) // CSRF protection // Public routes (no auth required) -- cgit v1.2.3