from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select, update, delete, func from typing import List, Optional from module_admin.system.entity.do.etest_entities_do import TestPermission class TestPermissionDao: """ 测试权限配置数据访问层 """ @classmethod async def get_by_id(cls, db: AsyncSession, id: int) -> Optional[TestPermission]: """根据ID查询""" result = await db.execute( select(TestPermission).where(TestPermission.id == id, TestPermission.del_flag == '0') ) return result.scalar_one_or_none() @classmethod async def get_by_user_id(cls, db: AsyncSession, user_id: int) -> List[TestPermission]: """根据用户ID查询权限列表""" result = await db.execute( select(TestPermission).where( TestPermission.user_id == user_id, TestPermission.del_flag == '0', TestPermission.can_claim == True ) ) return result.scalars().all() @classmethod async def get_by_user_and_category(cls, db: AsyncSession, user_id: int, category_id: int) -> Optional[TestPermission]: """根据用户ID和类别ID查询权限""" result = await db.execute( select(TestPermission).where( TestPermission.user_id == user_id, TestPermission.test_category_id == category_id, TestPermission.del_flag == '0', TestPermission.can_claim == True ) ) return result.scalar_one_or_none() @classmethod async def get_list(cls, db: AsyncSession, query_obj, is_page: bool = False): """查询列表""" query = select(TestPermission).where(TestPermission.del_flag == '0') if query_obj.user_id: query = query.where(TestPermission.user_id == query_obj.user_id) if query_obj.test_category_id: query = query.where(TestPermission.test_category_id == query_obj.test_category_id) if query_obj.permission_type: query = query.where(TestPermission.permission_type == query_obj.permission_type) if is_page: total = await db.execute(select(func.count()).select_from(query.subquery())) query = query.offset((query_obj.page_num - 1) * query_obj.page_size).limit(query_obj.page_size) result = await db.execute(query) return result.scalars().all(), total.scalar() else: result = await db.execute(query) return result.scalars().all() @classmethod async def add(cls, db: AsyncSession, obj: TestPermission): """新增""" db.add(obj) await db.flush() return obj.id @classmethod async def update(cls, db: AsyncSession, obj): """更新""" await db.execute( update(TestPermission).where(TestPermission.id == obj.id).values(**obj) ) @classmethod async def delete(cls, db: AsyncSession, ids: List[int]): """删除(逻辑删除)""" await db.execute( update(TestPermission).where(TestPermission.id.in_(ids)).values(del_flag='1') )