fix: restore models.py to 1346fbb baseline
Recovers 7 model classes (UserStorageQuota, AutomatedTask, ExternalKBService,
KnowledgeDocumentChunk, MCPServer, OSSStorageConfig, TaskExecutionLog) and the
gen_uuid helper that were lost in the mass file-deletion (5d7f32d). These are
required by the restored admin modules (storage_admin/asset_admin/etc). Verified
at runtime: /health=200 and all restored admin routers serve 200.
This commit is contained in:
1 parent
6d5e215a9f
commit
da0ab6496c
1 file changed
+164
@@ -65,6 +65,9 @@ class ApiKey(Base):
|
|||||||
last_used_at = Column(DateTime, default=None)
|
last_used_at = Column(DateTime, default=None)
|
||||||
created_at = Column(DateTime, default=datetime.now)
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
expired_at = Column(DateTime, default=None)
|
expired_at = Column(DateTime, default=None)
|
||||||
|
description = Column(String(500), default=None, comment="密钥描述")
|
||||||
|
rate_limit = Column(Integer, default=60, comment="速率限制(请求/分钟)")
|
||||||
|
total_calls = Column(BigInteger, default=0, comment="总调用次数")
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -81,6 +84,8 @@ class Conversation(Base):
|
|||||||
status = Column(String(10), nullable=False, default="active") # active / archived
|
status = Column(String(10), nullable=False, default="active") # active / archived
|
||||||
pinned = Column(Boolean, default=False)
|
pinned = Column(Boolean, default=False)
|
||||||
knowledge_graph_count = Column(Integer, default=0)
|
knowledge_graph_count = Column(Integer, default=0)
|
||||||
|
knowledge_graph_base_id = Column(String(64), default=None, comment="已生成的知识图谱知识库ID")
|
||||||
|
source = Column(String(32), default=None, comment="对话来源,如 wechat_bot")
|
||||||
created_at = Column(DateTime, default=datetime.now)
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
@@ -165,6 +170,12 @@ class KnowledgeBase(Base):
|
|||||||
knowledge_graph_count = Column(Integer, default=0)
|
knowledge_graph_count = Column(Integer, default=0)
|
||||||
created_at = Column(DateTime, default=datetime.now)
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
is_official = Column(Boolean, default=False)
|
||||||
|
status = Column(String(20), default="active")
|
||||||
|
external_service_id = Column(String(36), default=None)
|
||||||
|
external_id = Column(String(100), default=None)
|
||||||
|
external_sync_status = Column(String(20), default="none")
|
||||||
|
external_config = Column(JSON, default=None)
|
||||||
|
|
||||||
|
|
||||||
class KnowledgeDirectory(Base):
|
class KnowledgeDirectory(Base):
|
||||||
@@ -196,6 +207,28 @@ class KnowledgeDocument(Base):
|
|||||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class KnowledgeDocumentChunk(Base):
|
||||||
|
"""知识库文档分段表 — Stage C.1"""
|
||||||
|
__tablename__ = "knowledge_document_chunks"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
document_id = Column(String(36), ForeignKey("knowledge_documents.id"), nullable=False)
|
||||||
|
knowledge_base_id = Column(String(36), ForeignKey("knowledge_bases.id"), nullable=False)
|
||||||
|
chunk_index = Column(Integer, nullable=False, default=0, comment="分段序号")
|
||||||
|
content = Column(Text, nullable=False, comment="分段文本内容")
|
||||||
|
start_char = Column(Integer, default=0, comment="起始字符位置")
|
||||||
|
end_char = Column(Integer, default=0, comment="结束字符位置")
|
||||||
|
chunk_metadata = Column(JSON, default=None, comment="分段元数据(标题、关键词等)")
|
||||||
|
token_count = Column(Integer, default=0, comment="分段token数估算")
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
|
||||||
|
__table_args__ = (
|
||||||
|
Index("idx_kdc_doc_id", "document_id"),
|
||||||
|
Index("idx_kdc_kb_id", "knowledge_base_id"),
|
||||||
|
)
|
||||||
|
|
||||||
class KnowledgeGraphNode(Base):
|
class KnowledgeGraphNode(Base):
|
||||||
__tablename__ = "knowledge_graph_nodes"
|
__tablename__ = "knowledge_graph_nodes"
|
||||||
|
|
||||||
@@ -316,6 +349,23 @@ class MembershipPlan(Base):
|
|||||||
features = Column(JSON, default=None)
|
features = Column(JSON, default=None)
|
||||||
free_app_ids = Column(JSON, default=None)
|
free_app_ids = Column(JSON, default=None)
|
||||||
free_model_ids = Column(JSON, default=None)
|
free_model_ids = Column(JSON, default=None)
|
||||||
|
# 配额字段
|
||||||
|
max_agents = Column(Integer, default=5)
|
||||||
|
max_workflows = Column(Integer, default=3)
|
||||||
|
max_knowledge_bases = Column(Integer, default=2)
|
||||||
|
max_storage_mb = Column(Integer, default=1024)
|
||||||
|
api_calls_per_day = Column(Integer, default=100)
|
||||||
|
api_calls_per_min = Column(Integer, default=10)
|
||||||
|
# 权限字段
|
||||||
|
can_publish_apps = Column(Boolean, default=False)
|
||||||
|
can_create_api_keys = Column(Boolean, default=False)
|
||||||
|
can_use_workflow = Column(Boolean, default=False)
|
||||||
|
can_use_mcp = Column(Boolean, default=False)
|
||||||
|
can_use_code_exec = Column(Boolean, default=False)
|
||||||
|
can_use_privacy_mode = Column(Boolean, default=False)
|
||||||
|
can_use_dag = Column(Boolean, default=False)
|
||||||
|
allowed_model_tiers = Column(JSON, default=None)
|
||||||
|
permissions = Column(JSON, default=None)
|
||||||
is_active = Column(Boolean, default=True)
|
is_active = Column(Boolean, default=True)
|
||||||
created_at = Column(DateTime, default=datetime.now)
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
@@ -455,6 +505,7 @@ class AIModel(Base):
|
|||||||
id = Column(String(36), primary_key=True, default=gen_uuid)
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
provider_id = Column(String(36), ForeignKey("model_providers.id"), nullable=False)
|
provider_id = Column(String(36), ForeignKey("model_providers.id"), nullable=False)
|
||||||
name = Column(String(100), nullable=False)
|
name = Column(String(100), nullable=False)
|
||||||
|
display_name = Column(String(200), default=None, comment="display name")
|
||||||
api_key = Column(String(255), default=None)
|
api_key = Column(String(255), default=None)
|
||||||
endpoint = Column(String(500), default=None)
|
endpoint = Column(String(500), default=None)
|
||||||
capabilities = Column(JSON, default=None)
|
capabilities = Column(JSON, default=None)
|
||||||
@@ -577,6 +628,7 @@ class EmailConfig(Base):
|
|||||||
password = Column(String(200), nullable=False)
|
password = Column(String(200), nullable=False)
|
||||||
from_address = Column(String(200), nullable=False)
|
from_address = Column(String(200), nullable=False)
|
||||||
use_tls = Column(Boolean, default=True)
|
use_tls = Column(Boolean, default=True)
|
||||||
|
use_ssl = Column(Boolean, default=False)
|
||||||
created_at = Column(DateTime, default=datetime.now)
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
@@ -742,6 +794,8 @@ class OpenApiClient(Base):
|
|||||||
rate_limit = Column(Integer, default=60)
|
rate_limit = Column(Integer, default=60)
|
||||||
status = Column(String(10), nullable=False, default="active")
|
status = Column(String(10), nullable=False, default="active")
|
||||||
created_at = Column(DateTime, default=datetime.now)
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
total_calls = Column(BigInteger, default=0, comment="总调用次数")
|
||||||
|
last_used_at = Column(DateTime, default=None, comment="最后使用时间")
|
||||||
|
|
||||||
|
|
||||||
# ============================================================
|
# ============================================================
|
||||||
@@ -935,3 +989,113 @@ class TeamSharedSkill(Base):
|
|||||||
__table_args__ = (
|
__table_args__ = (
|
||||||
UniqueConstraint("team_id", "skill_id", name="uk_tss_team_skill"),
|
UniqueConstraint("team_id", "skill_id", name="uk_tss_team_skill"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ExternalKBService(Base):
|
||||||
|
"""外部知识库服务配置"""
|
||||||
|
__tablename__ = "external_kb_services"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
name = Column(String(200), nullable=False)
|
||||||
|
service_type = Column(String(20), nullable=False)
|
||||||
|
api_url = Column(String(500), nullable=False)
|
||||||
|
api_key = Column(String(255), default="")
|
||||||
|
config = Column(JSON, default=None)
|
||||||
|
is_enabled = Column(Boolean, default=True)
|
||||||
|
status = Column(String(20), default="disconnected")
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
|
class OSSStorageConfig(Base):
|
||||||
|
__tablename__ = "oss_storage_configs"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
name = Column(String(200), nullable=False)
|
||||||
|
provider = Column(String(20), nullable=False)
|
||||||
|
endpoint = Column(String(500), nullable=False)
|
||||||
|
access_key = Column(String(255), nullable=False)
|
||||||
|
secret_key = Column(String(255), nullable=False)
|
||||||
|
bucket = Column(String(200), nullable=False)
|
||||||
|
region = Column(String(100), default="")
|
||||||
|
base_path = Column(String(300), default="")
|
||||||
|
is_default = Column(Boolean, default=False)
|
||||||
|
is_enabled = Column(Boolean, default=True)
|
||||||
|
status = Column(String(20), default="disconnected")
|
||||||
|
config = Column(JSON, default=None)
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class UserStorageQuota(Base):
|
||||||
|
__tablename__ = "user_storage_quotas"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
user_id = Column(String(36), nullable=False, unique=True)
|
||||||
|
quota_bytes = Column(BigInteger, nullable=False, default=1073741824)
|
||||||
|
used_bytes = Column(BigInteger, nullable=False, default=0)
|
||||||
|
quota_type = Column(String(20), nullable=False, default="membership")
|
||||||
|
membership_level = Column(Integer, default=0)
|
||||||
|
plan_id = Column(String(36), default=None)
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
|
|
||||||
|
class AutomatedTask(Base):
|
||||||
|
__tablename__ = "automated_tasks"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
name = Column(String(200), nullable=False)
|
||||||
|
description = Column(Text, default="")
|
||||||
|
trigger_type = Column(String(20), nullable=False)
|
||||||
|
cron_expression = Column(String(100), default=None)
|
||||||
|
event_condition = Column(JSON, default=None)
|
||||||
|
action_type = Column(String(30), nullable=False)
|
||||||
|
action_config = Column(JSON, default=None)
|
||||||
|
is_enabled = Column(Boolean, default=True)
|
||||||
|
status = Column(String(20), default="idle")
|
||||||
|
max_retries = Column(Integer, default=3)
|
||||||
|
timeout_seconds = Column(Integer, default=300)
|
||||||
|
last_run_at = Column(DateTime, default=None)
|
||||||
|
next_run_at = Column(DateTime, default=None)
|
||||||
|
total_runs = Column(Integer, default=0)
|
||||||
|
success_runs = Column(Integer, default=0)
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
|
|
||||||
|
class TaskExecutionLog(Base):
|
||||||
|
__tablename__ = "task_execution_logs"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
task_id = Column(String(36), nullable=False)
|
||||||
|
task_name = Column(String(200), default="")
|
||||||
|
status = Column(String(20), default="running")
|
||||||
|
trigger_type = Column(String(20), default="manual")
|
||||||
|
started_at = Column(DateTime, default=None)
|
||||||
|
finished_at = Column(DateTime, default=None)
|
||||||
|
duration_ms = Column(Integer, default=0)
|
||||||
|
result_summary = Column(Text, default="")
|
||||||
|
error_message = Column(Text, default="")
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class MCPServer(Base):
|
||||||
|
__tablename__ = "mcp_servers"
|
||||||
|
|
||||||
|
id = Column(String(36), primary_key=True, default=gen_uuid)
|
||||||
|
name = Column(String(100), nullable=False)
|
||||||
|
description = Column(Text, default="")
|
||||||
|
transport_type = Column(String(20), default="stdio")
|
||||||
|
command = Column(String(500), default="")
|
||||||
|
args = Column(Text, default="")
|
||||||
|
env_vars = Column(Text, default="")
|
||||||
|
url = Column(String(500), default="")
|
||||||
|
headers = Column(Text, default="")
|
||||||
|
is_enabled = Column(Boolean, default=True)
|
||||||
|
status = Column(String(20), default="disconnected")
|
||||||
|
last_connected_at = Column(DateTime, default=None)
|
||||||
|
tools_count = Column(Integer, default=0)
|
||||||
|
resources_count = Column(Integer, default=0)
|
||||||
|
created_at = Column(DateTime, default=datetime.now)
|
||||||
|
updated_at = Column(DateTime, default=datetime.now, onupdate=datetime.now)
|
||||||
Reference in new issue
Block a user