from fooder.context import Context from fooder.controller.preset import PresetController from fooder.domain import Meal, Preset, PresetEntry async def save_meal_as_preset( ctx: Context, meal: Meal, name: str | None = None ) -> Preset: await ctx.repo.meal.session.refresh(meal) ctrl = await PresetController.create(ctx, name=name or meal.name) for entry in meal.entries: preset_entry = PresetEntry( grams=entry.grams, product_id=entry.product_id, preset_id=ctrl.obj.id, ) await ctx.repo.preset_entry.create(preset_entry) await ctx.repo.preset.session.refresh(ctrl.obj) return ctrl.obj