21 lines
776 B
Python
21 lines
776 B
Python
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
|