from sqlalchemy import select, func from fooder.domain import Meal from fooder.domain.diary import Diary from fooder.repository.base import RepositoryBase class MealRepository(RepositoryBase[Meal]): async def get_by_id_and_user(self, meal_id: int, user_id: int) -> Meal: stmt = ( select(Meal) .join(Diary, Meal.diary_id == Diary.id) .where(Meal.id == meal_id, Diary.user_id == user_id) ) return await self._get(stmt=stmt) async def next_order(self, diary_id: int) -> int: stmt = select(func.max(Meal.order)).where(Meal.diary_id == diary_id) result = await self.session.execute(stmt) max_order = result.scalar_one_or_none() return 0 if max_order is None else max_order + 1