from datetime import datetime from pydantic import BaseModel, ConfigDict, Field, Extra from pydantic.alias_generators import to_camel from pydantic_validation_decorator import NotBlank, Size from typing import Literal, Optional, List, Dict, Any from module_admin.annotation.pydantic_annotation import as_query class DataCatalogRequest(BaseModel): model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True, from_attributes=True) content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='目录序号') content_name: Optional[str] = Field(default=None, alias="contentName", description='目录名称') content_stat: Optional[str] = Field(default=None, alias="contentStat", description='目录状态') content_intr: Optional[str] = Field(default=None, alias="contentIntr", description='目录简介') content_pic: Optional[str] = Field(default=None, alias="contentPic", description='目录负责人') supr_content_onum: Optional[int] = Field(default=None, alias="suprContentOnum", description='上级目录序号') leaf_node_flag: Optional[int] = Field(default=None, alias="leafNodeFlag", description='叶子结点标志(自动计算)') upd_prsn: Optional[str] = Field(default=None, alias="updPrsn", description='更新人员(必填)') upd_time: Optional[datetime] = Field(default=None, alias="updTime", description='更新时间') # 校验逻辑保持不变 @NotBlank(field_name='content_name', message='目录名称不能为空') @Size(field_name='content_name', min_length=0, max_length=255, message='目录名称长度不能超过255个字符') @NotBlank(field_name='upd_prsn', message='更新人员不能为空') @Size(field_name='upd_prsn', min_length=0, max_length=255, message='更新人员长度不能超过255个字符') @NotBlank(field_name='content_stat', message='目录状态不能为空') @Size(field_name='content_stat', min_length=0, max_length=255) def validate_fields(self): pass class DataCatalogResponse(BaseModel): model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) content_onum: Optional[int] = Field(default=None,alias="contentOnum", description='目录ID') content_name: Optional[str] = Field(default=None,alias="contentName", description='目录名称') content_stat: Optional[str] = Field(default=None,alias="contentStat", description='目录状态') content_intr: Optional[str] = Field(default=None,alias="contentIntr", description='目录简介') content_pic: Optional[str] = Field(default=None,alias="contentPic", description='目录负责人') supr_content_onum: Optional[int] = Field(default=None,alias="suprContentOnum", description='上级目录序号') leaf_node_flag: Optional[int] = Field(default=None,alias="leafNodeFlag", description='叶子结点标志') upd_prsn: Optional[str] = Field(default=None,alias="updPrsn", description='更新人员') upd_time: Optional[datetime] = Field(default=None,alias="updTime", description='更新时间') class DataCatalogQueryModel(DataCatalogRequest): """ 目录管理不分页查询模型 """ begin_time: Optional[str] = Field(default=None, description='开始时间') end_time: Optional[str] = Field(default=None, description='结束时间') @as_query class DataCatalogPageQueryModel(DataCatalogQueryModel): """ 目录管理分页查询模型 """ page_num: int = Field(default=1, description='当前页码') page_size: int = Field(default=10, description='每页记录数') class DeleteDataCatalogModel(BaseModel): """ 删除目录模型 """ model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True) content_onums: str = Field(alias="contentOnums", description='需要删除的目录ID') class DataCatalogChild(BaseModel): model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) rela_onum: Optional[int] = Field(default=None, alias="relaOnum", description='目录关系序号') content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='目录序号') ast_onum: Optional[int] = Field(default=None, alias="astOnum", description='资产序号') rela_type: Optional[str] = Field(default="归属关系", alias="relaType", description='关系类型') rela_eff_begn_date: Optional[datetime] = Field(default=None, alias="relaEffBegnDate", description='关系有效起始日期') rela_eff_end_date: Optional[datetime] = Field(default=None, alias="relaEffEndDate", description='关系有效终止日期') upd_prsn: Optional[str] = Field(default=None, alias="updPrsn", description='更新人员') rela_status: Optional[str] = Field(default=None, alias="relaStatus", description='关系状态') class DataCatalogResponseWithChildren(BaseModel): model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='目录ID') content_name: Optional[str] = Field(default=None, alias="contentName", description='目录名称') content_stat: Optional[str] = Field(default=None, alias="contentStat", description='目录状态') content_intr: Optional[str] = Field(default=None, alias="contentIntr", description='目录简介') content_pic: Optional[str] = Field(default=None, alias="contentPic", description='目录负责人') supr_content_onum: Optional[int] = Field(default=None, alias="suprContentOnum", description='上级目录序号') leaf_node_flag: Optional[int] = Field(default=None, alias="leafNodeFlag", description='叶子结点标志') upd_prsn: Optional[str] = Field(default=None, alias="updPrsn", description='更新人员') upd_time: Optional[datetime] = Field(default=None, alias="updTime", description='更新时间') children: List[DataCatalogChild] = Field(default_factory=list, description='子关系列表') # 数据资产树模型 class DataAssetCatalogTreeNode(BaseModel): model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) data_ast_eng_name: Optional[str] = Field(default=None, alias="dataAssetCatalogNo", description='数据资产序号') data_ast_cn_name: Optional[str] = Field(default=None, alias="dataAssetCatalogName", description='数据资产名称') ast_no: Optional[int] = Field(default=None, alias="dataAssetCatalogAstno", description='资产编号') children: List['DataAssetCatalogTreeNode'] = Field(default_factory=list, description='子节点列表') class DataAssetCatalogTreeResponse(BaseModel): model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) data_ast_src: Optional[str] = Field(default=None, alias="dataAssetSysName", description='数据资产系统名称') children: List[DataAssetCatalogTreeNode] = Field(default_factory=list, description='子节点列表') class DataCatalogMovedRequest(BaseModel): model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, extra='ignore', # 使用字符串形式替代Extra.ignore from_attributes=True ) content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='移动前的目录序号') supr_content_onum: Optional[int] = Field(default=None, alias="suprContentOnum", description='移动前的上级目录序号') supr_content_onum_after: Optional[int] = Field(default=None, alias="suprContentOnumAfter", description='移动后的上级目录序号') class DataCatalogMergeRequest(BaseModel): model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, extra='ignore', from_attributes=True ) content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='移动前的目录序号') supr_content_onum: Optional[int] = Field(default=None, alias="suprContentOnum", description='移动前的上级目录序号') content_onum_after: Optional[int] = Field(default=None, alias="contentOnumAfter", description='合并前的上级目录序号') supr_content_onum_after: Optional[int] = Field(default=None, alias="suprContentOnumAfter", description='合并后的上级目录序号') class DataCatalogMoverelRequest(BaseModel): model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, extra='ignore', from_attributes=True ) rela_onum: Optional[int] = Field(default=None, alias="relaOnum", description='关系序号') content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='目录序号') content_onum_after: Optional[int] = Field(default=None, alias="contentOnumAfter", description='移动后的目录序号') class DataCatalogMoverelRequest(BaseModel): model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, extra='ignore', from_attributes=True ) rela_onum: Optional[int] = Field(default=None, alias="relaOnum", description='关系序号') content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='目录序号') content_onum_after: Optional[int] = Field(default=None, alias="contentOnumAfter", description='移动后的目录序号') upd_prsn: Optional[str] = Field(default=None, alias="updPrsn", description='更新人员') class DataAstBookmarkRelaRequest(BaseModel): model_config = ConfigDict( alias_generator=to_camel, populate_by_name=True, extra='ignore', from_attributes=True ) rela_onum: Optional[int] = Field(default=None, alias="relaOnum", description='唯一关系序号') user_id: Optional[str] = Field(default=None, alias="userId", description='用户ID') data_ast_no: Optional[str] = Field(default=None, alias="dataAstNo", description='数据资产编号') bookmark_orde: Optional[int] = Field(default=0, alias="bookmarkOrde", description='收藏顺序') bookmark_time: Optional[datetime] = Field(default_factory=datetime.now, alias="bookmarkTime", description='收藏时间') content_onum: Optional[int] = Field(default=None, alias="contentOnum", description='目录序号') rela_type: Optional[str] = Field(default="归属关系", alias="relaType", description='关系类型') rela_eff_begn_date: Optional[datetime] = Field(default=None, alias="relaEffBegnDate", description='关系有效起始日期') rela_eff_end_date: Optional[datetime] = Field(default=None, alias="relaEffEndDate", description='关系有效终止日期') class DataAstIndxRequest(BaseModel): model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True, from_attributes=True) ast_no: Optional[str] = Field(default=None, alias="astNo", description='资产编号') indx_no: Optional[str] = Field(default=None, alias="indxNo", description='指标编号') indx_name: Optional[str] = Field(default=None, alias="indxName", description='指标名称') indx_val: Optional[float] = Field(default=None, alias="indxVal", description='指标值') class DataAstIndxResponse(BaseModel): model_config = ConfigDict(alias_generator=to_camel, from_attributes=True) ast_no: Optional[str] = Field(default=None, alias="astNo", description='资产编号') indx_no: Optional[str] = Field(default=None, alias="indxNo", description='指标编号') indx_name: Optional[str] = Field(default=None, alias="indxName", description='指标名称') indx_val: Optional[float] = Field(default=None, alias="indxVal", description='指标值') class DataAstSecuRequest(BaseModel): model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True, from_attributes=True) data_ast_src: Optional[str] = Field(default=None, alias="dataAstSrc", description='数据源连接') data_ast_eng_name: Optional[str] = Field(default=None, alias="dataAstEngName", description='表英文名') class DataAstSecuResponse(BaseModel): model_config = ConfigDict(alias_generator=to_camel, populate_by_name=True, from_attributes=True) data_ast_src: Optional[str] = Field(default=None, alias="dataAstSrc", description='数据源连接') data_ast_eng_name: Optional[str] = Field(default=None, alias="dataAstEngName", description='表英文名')