merge main
This commit is contained in:
@@ -0,0 +1,111 @@
|
||||
from sqlalchemy import select, func
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from app.models.user_oauth_account import UserOAuthAccount
|
||||
from app.models.user_oauth import UserOAuth
|
||||
|
||||
|
||||
async def get_oauth_account_list(
|
||||
db: AsyncSession,
|
||||
page: int = 1,
|
||||
page_size: int = 20,
|
||||
advertiser_id: str | None = None,
|
||||
oauth_id: str | None = None,
|
||||
advertiser_name: str | None = None,
|
||||
user_id: str | None = None,
|
||||
) -> dict:
|
||||
# 构建连表查询
|
||||
query = select(
|
||||
UserOAuthAccount.id,
|
||||
UserOAuthAccount.advertiser_id,
|
||||
UserOAuthAccount.advertiser_name,
|
||||
UserOAuthAccount.advertiser_role,
|
||||
UserOAuthAccount.oauth_id,
|
||||
UserOAuthAccount.created_at,
|
||||
UserOAuth.account_id,
|
||||
UserOAuth.account_name,
|
||||
UserOAuth.account_role,
|
||||
UserOAuth.account_username,
|
||||
UserOAuth.account_userid,
|
||||
UserOAuth.open_type,
|
||||
).join(
|
||||
UserOAuth,
|
||||
UserOAuth.id == UserOAuthAccount.oauth_id
|
||||
).where(
|
||||
UserOAuth.deleted_at.is_(None),
|
||||
UserOAuthAccount.deleted_at.is_(None),
|
||||
UserOAuth.user_id == user_id, # 过滤当前登录用户
|
||||
)
|
||||
|
||||
# 添加筛选条件
|
||||
if advertiser_id:
|
||||
query = query.where(UserOAuthAccount.advertiser_id == advertiser_id)
|
||||
if oauth_id:
|
||||
query = query.where(UserOAuthAccount.oauth_id == oauth_id)
|
||||
if advertiser_name:
|
||||
query = query.where(UserOAuthAccount.advertiser_name.like(f"%{advertiser_name}%"))
|
||||
|
||||
# 查询总数
|
||||
count_query = select(func.count()).select_from(query.subquery())
|
||||
total_result = await db.execute(count_query)
|
||||
total = total_result.scalar() or 0
|
||||
|
||||
# 查询分页数据
|
||||
offset = (page - 1) * page_size
|
||||
query = query.offset(offset).limit(page_size).order_by(UserOAuthAccount.created_at.desc())
|
||||
|
||||
result = await db.execute(query)
|
||||
accounts = result.all()
|
||||
|
||||
total_pages = (total + page_size - 1) // page_size if total > 0 else 0
|
||||
# 转换为字典列表(或 Pydantic 实例列表)
|
||||
data = [
|
||||
{
|
||||
"id": row.id,
|
||||
"advertiser_id": row.advertiser_id,
|
||||
"advertiser_name": row.advertiser_name,
|
||||
"advertiser_role": row.advertiser_role,
|
||||
"oauth_id": row.oauth_id,
|
||||
"account_id": row.account_id,
|
||||
"account_name": row.account_name,
|
||||
"account_role": row.account_role,
|
||||
"account_username": row.account_username,
|
||||
"account_userid": row.account_userid,
|
||||
"open_type": row.open_type,
|
||||
"created_at": row.created_at,
|
||||
}
|
||||
for row in accounts
|
||||
]
|
||||
return {
|
||||
"data": data,
|
||||
"page": page,
|
||||
"page_size": page_size,
|
||||
"total": total,
|
||||
"total_pages": total_pages,
|
||||
}
|
||||
|
||||
|
||||
async def delete_oauth_account(
|
||||
db: AsyncSession,
|
||||
account_id: str,
|
||||
user_id: str,
|
||||
) -> bool:
|
||||
result = await db.execute(
|
||||
select(UserOAuthAccount).join(
|
||||
UserOAuth,
|
||||
UserOAuth.id == UserOAuthAccount.oauth_id
|
||||
).where(
|
||||
UserOAuthAccount.id == account_id,
|
||||
UserOAuthAccount.deleted_at.is_(None),
|
||||
UserOAuth.user_id == user_id, # 过滤当前登录用户
|
||||
)
|
||||
)
|
||||
account = result.scalar_one_or_none()
|
||||
if not account:
|
||||
raise ValueError("授权账户不存在")
|
||||
|
||||
# 软删除
|
||||
account.deleted_at = func.now()
|
||||
await db.commit()
|
||||
|
||||
return True
|
||||
Reference in New Issue
Block a user