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
|
package store
import (
"time"
"task-dashboard/internal/models"
)
func (s *Store) SaveMeals(meals []models.Meal) error {
tx, err := s.db.Begin()
if err != nil {
return err
}
defer func() { _ = tx.Rollback() }()
stmt, err := tx.Prepare(`
INSERT OR REPLACE INTO meals
(id, recipe_name, date, meal_type, recipe_url, updated_at)
VALUES (?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
`)
if err != nil {
return err
}
defer func() { _ = stmt.Close() }()
for _, meal := range meals {
_, err := stmt.Exec(
meal.ID,
meal.RecipeName,
meal.Date,
meal.MealType,
meal.RecipeURL,
)
if err != nil {
return err
}
}
return tx.Commit()
}
// GetMeals retrieves meals from the database
func (s *Store) GetMeals(startDate, endDate time.Time) ([]models.Meal, error) {
rows, err := s.db.Query(`
SELECT id, recipe_name, date, meal_type, recipe_url
FROM meals
WHERE date BETWEEN ? AND ?
ORDER BY date ASC,
CASE meal_type
WHEN 'breakfast' THEN 1
WHEN 'lunch' THEN 2
WHEN 'dinner' THEN 3
ELSE 4
END
`, startDate, endDate)
if err != nil {
return nil, err
}
defer func() { _ = rows.Close() }()
var meals []models.Meal
for rows.Next() {
var meal models.Meal
err := rows.Scan(
&meal.ID,
&meal.RecipeName,
&meal.Date,
&meal.MealType,
&meal.RecipeURL,
)
if err != nil {
return nil, err
}
meals = append(meals, meal)
}
return meals, rows.Err()
}
func (s *Store) GetMealsByDateRange(start, end time.Time) ([]models.Meal, error) {
return s.GetMeals(start, end)
}
|