补充主数据删除能力契约
This commit is contained in:
@@ -143,8 +143,24 @@ class MasterService:
|
||||
resource: MasterResource,
|
||||
query_object: BaseModel,
|
||||
is_page: bool,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
return await getattr(MasterDao, f'list_{resource}')(db, query_object, is_page)
|
||||
) -> PageModel | list[BaseModel]:
|
||||
result = await getattr(MasterDao, f'list_{resource}')(db, query_object, is_page)
|
||||
config = _RESOURCE_CONFIG[resource]
|
||||
records = result.rows if isinstance(result, PageModel) else result
|
||||
models = [config['vo'].model_validate(record) for record in records]
|
||||
id_field = config['id_field']
|
||||
removability = await MasterDao.get_master_removability(
|
||||
db,
|
||||
resource,
|
||||
[getattr(model, id_field) for model in models],
|
||||
)
|
||||
rows = [
|
||||
model.model_copy(update={'can_remove': removability.get(getattr(model, id_field), False)})
|
||||
for model in models
|
||||
]
|
||||
if isinstance(result, PageModel):
|
||||
return result.model_copy(update={'rows': rows})
|
||||
return rows
|
||||
|
||||
@classmethod
|
||||
async def _detail(cls, db: AsyncSession, resource: MasterResource, resource_id: int) -> BaseModel:
|
||||
@@ -152,7 +168,9 @@ class MasterService:
|
||||
record = await getattr(MasterDao, f'get_{resource}')(db, resource_id)
|
||||
if record is None:
|
||||
raise ServiceException(message=f'{config["label"]}不存在')
|
||||
return config['vo'].model_validate(record)
|
||||
model = config['vo'].model_validate(record)
|
||||
removability = await MasterDao.get_master_removability(db, resource, [resource_id])
|
||||
return model.model_copy(update={'can_remove': removability.get(resource_id, False)})
|
||||
|
||||
@classmethod
|
||||
async def _add(
|
||||
@@ -235,7 +253,7 @@ class MasterService:
|
||||
db: AsyncSession,
|
||||
query_object: StrainPageQueryModel,
|
||||
is_page: bool = True,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
) -> PageModel | list[StrainModel]:
|
||||
return await cls._list(db, 'strain', query_object, is_page)
|
||||
|
||||
@classmethod
|
||||
@@ -264,7 +282,7 @@ class MasterService:
|
||||
db: AsyncSession,
|
||||
query_object: CustomerPageQueryModel,
|
||||
is_page: bool = True,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
) -> PageModel | list[CustomerModel]:
|
||||
return await cls._list(db, 'customer', query_object, is_page)
|
||||
|
||||
@classmethod
|
||||
@@ -293,7 +311,7 @@ class MasterService:
|
||||
db: AsyncSession,
|
||||
query_object: SitePageQueryModel,
|
||||
is_page: bool = True,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
) -> PageModel | list[SiteModel]:
|
||||
return await cls._list(db, 'site', query_object, is_page)
|
||||
|
||||
@classmethod
|
||||
@@ -322,7 +340,7 @@ class MasterService:
|
||||
db: AsyncSession,
|
||||
query_object: LinePageQueryModel,
|
||||
is_page: bool = True,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
) -> PageModel | list[LineModel]:
|
||||
return await cls._list(db, 'line', query_object, is_page)
|
||||
|
||||
@classmethod
|
||||
@@ -351,7 +369,7 @@ class MasterService:
|
||||
db: AsyncSession,
|
||||
query_object: WarehousePageQueryModel,
|
||||
is_page: bool = True,
|
||||
) -> PageModel | list[dict[str, Any]]:
|
||||
) -> PageModel | list[WarehouseModel]:
|
||||
return await cls._list(db, 'warehouse', query_object, is_page)
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user