From 7d59a3020c9a98bb8af7240f584ac4c7813a46f6 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Wed, 15 Jul 2026 09:41:03 +0000 Subject: refactor(store): extract meal methods from sqlite.go into meals.go Pure move: SaveMeals/GetMeals/GetMealsByDateRange and their test (plus its setupTestStoreWithMeals helper, used only by that test) out of the 1400+ line sqlite.go into their own file. No behavior change. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01VTUSAEKfsPc6WGDq45yPHD --- internal/store/meals.go | 82 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 internal/store/meals.go (limited to 'internal/store/meals.go') 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) +} -- cgit v1.2.3