1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
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()
}
|