19 lines
670 B
Python
19 lines
670 B
Python
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
|