87 lines
3.0 KiB
Python
87 lines
3.0 KiB
Python
"""
|
||
Operator Market Data Models
|
||
算子市场数据模型
|
||
"""
|
||
|
||
from sqlalchemy import (
|
||
Column,
|
||
String,
|
||
Integer,
|
||
Boolean,
|
||
BigInteger,
|
||
Text,
|
||
JSON,
|
||
TIMESTAMP,
|
||
Index,
|
||
)
|
||
from sqlalchemy.sql import func
|
||
|
||
from app.db.models.base_entity import Base, BaseEntity
|
||
|
||
|
||
class Operator(BaseEntity):
|
||
"""算子实体"""
|
||
|
||
__tablename__ = "t_operator"
|
||
|
||
id = Column(String(36), primary_key=True, index=True, comment="算子ID")
|
||
name = Column(String(255), nullable=False, comment="算子名称")
|
||
description = Column(Text, nullable=True, comment="算子描述")
|
||
version = Column(String(50), nullable=False, comment="算子版本")
|
||
inputs = Column(Text, nullable=True, comment="输入定义(JSON)")
|
||
outputs = Column(Text, nullable=True, comment="输出定义(JSON)")
|
||
runtime = Column(Text, nullable=True, comment="运行时配置(JSON)")
|
||
settings = Column(Text, nullable=True, comment="算子设置(JSON)")
|
||
file_name = Column(String(255), nullable=True, comment="文件名")
|
||
file_size = Column(BigInteger, nullable=True, comment="文件大小(字节)")
|
||
metrics = Column(Text, nullable=True, comment="算子指标(JSON)")
|
||
usage_count = Column(Integer, default=0, nullable=False, comment="使用次数")
|
||
is_star = Column(Boolean, default=False, nullable=False, comment="是否收藏")
|
||
|
||
__table_args__ = (Index("idx_is_star", "is_star"),)
|
||
|
||
|
||
class Category(BaseEntity):
|
||
"""算子分类实体"""
|
||
|
||
__tablename__ = "t_operator_category"
|
||
|
||
id = Column(String(36), primary_key=True, index=True, comment="分类ID")
|
||
name = Column(String(255), nullable=False, comment="分类名称(中文)")
|
||
name_en = Column(String(255), nullable=True, comment="分类名称(英文)")
|
||
value = Column(String(255), nullable=True, comment="分类值")
|
||
type = Column(String(50), nullable=True, comment="分类类型")
|
||
parent_id = Column(String(36), nullable=False, default="0", comment="父分类ID")
|
||
|
||
|
||
class CategoryRelation(BaseEntity):
|
||
"""算子分类关系实体"""
|
||
|
||
__tablename__ = "t_operator_category_relation"
|
||
|
||
category_id = Column(String(36), primary_key=True, comment="分类ID")
|
||
operator_id = Column(String(36), primary_key=True, comment="算子ID")
|
||
|
||
__table_args__ = (
|
||
Index("idx_category_id", "category_id"),
|
||
Index("idx_operator_id", "operator_id"),
|
||
)
|
||
|
||
|
||
class OperatorRelease(BaseEntity):
|
||
"""算子发布版本实体"""
|
||
|
||
__tablename__ = "t_operator_release"
|
||
|
||
id = Column(String(36), primary_key=True, comment="算子ID")
|
||
version = Column(String(50), primary_key=True, comment="版本号")
|
||
release_date = Column(
|
||
TIMESTAMP, nullable=False, default=func.now(), comment="发布时间"
|
||
)
|
||
changelog = Column(JSON, nullable=True, comment="更新日志列表")
|
||
|
||
|
||
# Ignore data scope for operator models
|
||
for model in [Operator, Category, CategoryRelation, OperatorRelease]:
|
||
model.__ignore_data_scope__ = True
|