from sqlmodel import BIGINT, Field, select, func from sqlmodel.ext.asyncio.session import AsyncSession from .bot_entity import BotEntity from .descriptors import EntityField from .user import UserBase from . import session_dep class OwnedBotEntity(BotEntity, table = False): user_id: int | None = EntityField( sm_descriptor = Field(sa_type = BIGINT, foreign_key = "user.id", ondelete="SET NULL"), is_visible = False) @classmethod @session_dep async def get_multi_by_user(cls, *, session: AsyncSession | None = None, user_id: int, order_by = None, skip: int = 0, limit: int = None): select_statement = select(cls).where(cls.user_id == user_id).offset(skip) if limit: select_statement = select_statement.limit(limit) if order_by: select_statement = select_statement.order_by(order_by) return (await session.exec(select_statement)).all() @classmethod @session_dep async def get_count_by_user(cls, *, session: AsyncSession | None = None, user_id: int): return await session.scalar( select(func.count()). select_from(cls). where(cls.user_id == user_id))