diff options
| author | Peter Stone <thepeterstone@gmail.com> | 2026-07-15 09:44:47 +0000 |
|---|---|---|
| committer | Peter Stone <thepeterstone@gmail.com> | 2026-07-16 02:53:12 +0000 |
| commit | 3d69922b0a9904be7e2261d4376ea051bb29afd4 (patch) | |
| tree | ec825c39a14c0f99adfc6e781529377fef9254f9 /internal/store/calendar.go | |
| parent | b27b7e681952df44f05c60eea7218798b31d1fb4 (diff) | |
refactor(store): extract calendar and Google Tasks methods from sqlite.go
Pure move: SaveCalendarEvents/GetCalendarEvents/GetCalendarEventsByDateRange
into calendar.go, SaveGoogleTasks/GetGoogleTasks/GetGoogleTasksByDateRange
into google_tasks.go. Neither cluster had dedicated tests in
sqlite_test.go to move. No behavior change.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VTUSAEKfsPc6WGDq45yPHD
Diffstat (limited to 'internal/store/calendar.go')
| -rw-r--r-- | internal/store/calendar.go | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/internal/store/calendar.go b/internal/store/calendar.go new file mode 100644 index 0000000..44ffe0e --- /dev/null +++ b/internal/store/calendar.go @@ -0,0 +1,85 @@ +package store + +import ( + "time" + + "task-dashboard/internal/models" +) + +func (s *Store) SaveCalendarEvents(events []models.CalendarEvent) error { + tx, err := s.db.Begin() + if err != nil { + return err + } + defer func() { _ = tx.Rollback() }() + + _, err = tx.Exec(`DELETE FROM calendar_events`) + if err != nil { + return err + } + + stmt, err := tx.Prepare(` + INSERT INTO calendar_events (id, summary, description, start_time, end_time, html_link, recurring_event_id) + VALUES (?, ?, ?, ?, ?, ?, ?) + `) + if err != nil { + return err + } + defer func() { _ = stmt.Close() }() + + for _, e := range events { + _, err = stmt.Exec(e.ID, e.Summary, e.Description, e.Start, e.End, e.HTMLLink, e.RecurringEventID) + if err != nil { + return err + } + } + + return tx.Commit() +} + +// GetCalendarEvents retrieves all cached calendar events +func (s *Store) GetCalendarEvents() ([]models.CalendarEvent, error) { + rows, err := s.db.Query(` + SELECT id, summary, description, start_time, end_time, html_link + FROM calendar_events + ORDER BY start_time ASC + `) + if err != nil { + return nil, err + } + defer func() { _ = rows.Close() }() + + var events []models.CalendarEvent + for rows.Next() { + var e models.CalendarEvent + if err := rows.Scan(&e.ID, &e.Summary, &e.Description, &e.Start, &e.End, &e.HTMLLink); err != nil { + return nil, err + } + events = append(events, e) + } + return events, rows.Err() +} + +// GetCalendarEventsByDateRange retrieves cached calendar events within a date range +func (s *Store) GetCalendarEventsByDateRange(start, end time.Time) ([]models.CalendarEvent, error) { + rows, err := s.db.Query(` + SELECT id, summary, description, start_time, end_time, html_link, recurring_event_id + FROM calendar_events + WHERE start_time >= ? AND start_time <= ? + ORDER BY start_time ASC + `, start, end) + if err != nil { + return nil, err + } + defer func() { _ = rows.Close() }() + + var events []models.CalendarEvent + for rows.Next() { + var e models.CalendarEvent + if err := rows.Scan(&e.ID, &e.Summary, &e.Description, &e.Start, &e.End, &e.HTMLLink, &e.RecurringEventID); err != nil { + return nil, err + } + events = append(events, e) + } + return events, rows.Err() +} |
