feat: extend MetadataFieldDefinitionService with field_roles support [AC-MRS-01,02,03,06]

This commit is contained in:
MerCry 2026-03-05 17:12:26 +08:00
parent 0db2971c73
commit 7fb7721974
1 changed files with 39 additions and 4 deletions

View File

@ -1,6 +1,7 @@
""" """
Metadata Field Definition Service. Metadata Field Definition Service.
[AC-IDSMETA-13, AC-IDSMETA-14] 元数据字段定义管理服务支持字段级状态治理 [AC-IDSMETA-13, AC-IDSMETA-14] 元数据字段定义管理服务支持字段级状态治理
[AC-MRS-01, AC-MRS-02, AC-MRS-03, AC-MRS-06] 支持字段角色分层配置
""" """
import logging import logging
@ -21,7 +22,9 @@ from app.models.entities import (
MetadataFieldStatus, MetadataFieldStatus,
MetadataFieldType, MetadataFieldType,
MetadataScope, MetadataScope,
FieldRole,
) )
from app.schemas.metadata import VALID_FIELD_ROLES
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -42,14 +45,16 @@ class MetadataFieldDefinitionService:
tenant_id: str, tenant_id: str,
status: str | None = None, status: str | None = None,
scope: str | None = None, scope: str | None = None,
role: str | None = None,
) -> list[MetadataFieldDefinition]: ) -> list[MetadataFieldDefinition]:
""" """
[AC-IDSMETA-13] 列出租户所有元数据字段定义 [AC-IDSMETA-13] [AC-MRS-06] 列出租户所有元数据字段定义
Args: Args:
tenant_id: 租户 ID tenant_id: 租户 ID
status: 按状态过滤draft/active/deprecated status: 按状态过滤draft/active/deprecated
scope: 按适用范围过滤 scope: 按适用范围过滤
role: [AC-MRS-06] 按字段角色过滤
Returns: Returns:
MetadataFieldDefinition 列表 MetadataFieldDefinition 列表
@ -66,6 +71,11 @@ class MetadataFieldDefinitionService:
cast(MetadataFieldDefinition.scope, JSONB).op('?')(scope) cast(MetadataFieldDefinition.scope, JSONB).op('?')(scope)
) )
if role:
stmt = stmt.where(
cast(MetadataFieldDefinition.field_roles, JSONB).op('?')(role)
)
stmt = stmt.order_by(col(MetadataFieldDefinition.created_at).desc()) stmt = stmt.order_by(col(MetadataFieldDefinition.created_at).desc())
result = await self._session.execute(stmt) result = await self._session.execute(stmt)
@ -121,7 +131,7 @@ class MetadataFieldDefinitionService:
field_create: MetadataFieldDefinitionCreate, field_create: MetadataFieldDefinitionCreate,
) -> MetadataFieldDefinition: ) -> MetadataFieldDefinition:
""" """
[AC-IDSMETA-13] 创建元数据字段定义 [AC-IDSMETA-13] [AC-MRS-01,02,03] 创建元数据字段定义
Args: Args:
tenant_id: 租户 ID tenant_id: 租户 ID
@ -149,6 +159,8 @@ class MetadataFieldDefinitionService:
field_create.field_key, field_create.field_key,
) )
self._validate_field_roles(field_create.field_roles)
field = MetadataFieldDefinition( field = MetadataFieldDefinition(
tenant_id=tenant_id, tenant_id=tenant_id,
field_key=field_create.field_key, field_key=field_create.field_key,
@ -160,6 +172,7 @@ class MetadataFieldDefinitionService:
scope=field_create.scope, scope=field_create.scope,
is_filterable=field_create.is_filterable, is_filterable=field_create.is_filterable,
is_rank_feature=field_create.is_rank_feature, is_rank_feature=field_create.is_rank_feature,
field_roles=field_create.field_roles or [],
status=field_create.status, status=field_create.status,
version=1, version=1,
) )
@ -168,8 +181,8 @@ class MetadataFieldDefinitionService:
await self._session.flush() await self._session.flush()
logger.info( logger.info(
f"[AC-IDSMETA-13] Created field definition: tenant={tenant_id}, " f"[AC-IDSMETA-13] [AC-MRS-01] Created field definition: tenant={tenant_id}, "
f"field_key={field.field_key}, status={field.status}" f"field_key={field.field_key}, status={field.status}, field_roles={field.field_roles}"
) )
return field return field
@ -437,6 +450,28 @@ class MetadataFieldDefinitionService:
f"字段 '{field_key}' 的 options 存在重复值" f"字段 '{field_key}' 的 options 存在重复值"
) )
def _validate_field_roles(
self,
field_roles: list[str] | None,
) -> None:
"""
[AC-MRS-01,02,03] 验证字段角色配置的有效性
Args:
field_roles: 字段角色列表
Raises:
ValueError: 如果包含无效的字段角色
"""
if not field_roles:
return
for role in field_roles:
if role not in VALID_FIELD_ROLES:
raise ValueError(
f"无效的字段角色 '{role}',有效角色为: {VALID_FIELD_ROLES}"
)
async def get_field_definitions_map( async def get_field_definitions_map(
self, self,
tenant_id: str, tenant_id: str,