mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 07:27:15 +08:00
refactor: migrate user model queries
This commit is contained in:
+33
-7
@@ -4,7 +4,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from sqlalchemy.orm import Mapped, Session, mapped_column
|
||||
|
||||
from app.db.base import Base, get_id_column
|
||||
from app.db.decorators import db_query, async_db_query
|
||||
from app.db.decorators import async_db_query, run_legacy_sync_query
|
||||
|
||||
|
||||
class User(Base):
|
||||
@@ -35,9 +35,24 @@ class User(Base):
|
||||
settings: Mapped[Optional[Any]] = mapped_column(JSON, default=dict)
|
||||
|
||||
@classmethod
|
||||
@db_query
|
||||
def get_by_name(cls, db: Session, name: str):
|
||||
return db.execute(select(cls).where(cls.name == name)).scalars().first()
|
||||
def get_by_name(
|
||||
cls,
|
||||
db: Session | str | None = None,
|
||||
name: str | None = None,
|
||||
):
|
||||
"""按用户名查询用户,兼容显式会话和旧插件无会话调用。"""
|
||||
if name is None and isinstance(db, str):
|
||||
name, db = db, None
|
||||
if name is None:
|
||||
raise TypeError("name is required")
|
||||
|
||||
def query(session: Session):
|
||||
"""在给定会话中执行用户名查询。"""
|
||||
return session.execute(select(cls).where(cls.name == name)).scalars().first()
|
||||
|
||||
if isinstance(db, Session):
|
||||
return query(db)
|
||||
return run_legacy_sync_query(query)
|
||||
|
||||
@classmethod
|
||||
@async_db_query
|
||||
@@ -48,9 +63,20 @@ class User(Base):
|
||||
return result.scalars().first()
|
||||
|
||||
@classmethod
|
||||
@db_query
|
||||
def get_by_id(cls, db: Session, user_id: int):
|
||||
return db.execute(select(cls).where(cls.id == user_id)).scalars().first()
|
||||
def get_by_id(cls, db: Session | int | None = None, user_id: int | None = None):
|
||||
"""按用户 ID 查询用户,兼容显式会话和旧插件无会话调用。"""
|
||||
if user_id is None and isinstance(db, int):
|
||||
user_id, db = db, None
|
||||
if user_id is None:
|
||||
raise TypeError("user_id is required")
|
||||
|
||||
def query(session: Session):
|
||||
"""在给定会话中执行用户 ID 查询。"""
|
||||
return session.execute(select(cls).where(cls.id == user_id)).scalars().first()
|
||||
|
||||
if isinstance(db, Session):
|
||||
return query(db)
|
||||
return run_legacy_sync_query(query)
|
||||
|
||||
@classmethod
|
||||
@async_db_query
|
||||
|
||||
Reference in New Issue
Block a user