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() }