from sqlalchemy.ext.asyncio import AsyncSession from module_admin.dao.metadata_config_dao import MetadataConfigDao from module_admin.entity.vo.common_vo import CrudResponseModel from module_admin.entity.vo.metadata_config_vo import MetadataClasModel, MetadataClasPageQueryModel from utils.common_util import CamelCaseUtil from exceptions.exception import ServiceException class MetadataConfigService: """ 元数据分类管理 Service """ @classmethod async def get_metadata_clas_list_services( cls, query_db: AsyncSession, query_object: MetadataClasPageQueryModel, is_page: bool = False ): """ 查询元数据分类列表 """ result = await MetadataConfigDao.get_metadata_clas_list(query_db, query_object, is_page) return result @classmethod async def add_metadata_clas_services( cls, query_db: AsyncSession, page_object: MetadataClasModel ): """ 新增元数据分类 """ try: await MetadataConfigDao.add_metadata_clas_dao(query_db, page_object) await query_db.commit() return CrudResponseModel(is_success=True, message="新增成功") except Exception as e: await query_db.rollback() raise e @classmethod async def edit_metadata_clas_services( cls, query_db: AsyncSession, page_object: MetadataClasModel ): """ 编辑元数据分类 """ edit_data = page_object.model_dump(exclude_unset=True) info = await cls.get_metadata_clas_detail_services(query_db, page_object.clas_onum) if info.clas_onum: try: await MetadataConfigDao.edit_metadata_clas_dao(query_db, page_object.clas_onum, edit_data) await query_db.commit() return CrudResponseModel(is_success=True, message="更新成功") except Exception as e: await query_db.rollback() raise e else: raise ServiceException(message="元数据标签不存在") @classmethod async def delete_metadata_clas_services( cls, query_db: AsyncSession, clas_ids: str ): """ 删除元数据分类(支持多个ID用逗号分隔) """ if not clas_ids: raise ServiceException(message="传入的分类ID为空") id_list = [int(id_str) for id_str in clas_ids.split(",") if id_str.isdigit()] if not id_list: raise ServiceException(message="无效的分类ID列表") try: await MetadataConfigDao.delete_metadata_clas_dao(query_db, id_list) await query_db.commit() return CrudResponseModel(is_success=True, message="删除成功") except Exception as e: await query_db.rollback() raise e @classmethod async def get_metadata_clas_detail_services(cls, query_db: AsyncSession, clas_id: int): """ 查询元数据分类详情 """ result = await MetadataConfigDao.get_clas_detail_by_id(query_db, clas_id) if result: return MetadataClasModel(**CamelCaseUtil.transform_result(result)) else: return MetadataClasModel(**dict())