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