49 lines
1.7 KiB
Python
49 lines
1.7 KiB
Python
from sqlmodel import BIGINT, Field, select, func, column
|
|
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,
|
|
filter: str = None,
|
|
order_by = None,
|
|
skip: int = 0,
|
|
limit: int = None):
|
|
|
|
select_statement = select(cls).where(cls.user_id == user_id).offset(skip)
|
|
if filter:
|
|
select_statement = select_statement.where(column("name").ilike(f"%{filter}%"))
|
|
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,
|
|
filter: str = None) -> int:
|
|
|
|
select_statement = select(func.count()).select_from(cls).where(cls.user_id == user_id)
|
|
if filter:
|
|
select_statement = select_statement.where(column("name").ilike(f"%{filter}%"))
|
|
|
|
return await session.scalar(select_statement) |