44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
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)) |