补充主数据删除能力契约

This commit is contained in:
焦龙言
2026-07-27 04:34:10 +08:00
parent d1f0b9d48b
commit 33f29df40e
6 changed files with 311 additions and 12 deletions
@@ -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