summaryrefslogtreecommitdiff
path: root/internal/store/meals.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/store/meals.go')
-rw-r--r--internal/store/meals.go82
1 files changed, 82 insertions, 0 deletions
diff --git a/internal/store/meals.go b/internal/store/meals.go
new file mode 100644
index 0000000..5f4024b
--- /dev/null
+++ b/internal/store/meals.go
@@ -0,0 +1,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)
+}