Files
MuMuAINovel/backend/app/models/prompt_workshop.py
T

89 lines
4.5 KiB
Python
Raw Normal View History

2026-01-27 13:57:32 +08:00
"""提示词工坊数据模型"""
from sqlalchemy import Column, String, Text, Boolean, DateTime, Integer, JSON, ForeignKey, Index
from sqlalchemy.sql import func
from app.database import Base
class PromptWorkshopItem(Base):
"""提示词工坊条目 - 已审核通过的公开提示词"""
__tablename__ = "prompt_workshop_items"
id = Column(String(36), primary_key=True, comment="UUID")
name = Column(String(100), nullable=False, comment="提示词名称")
description = Column(Text, comment="提示词描述")
prompt_content = Column(Text, nullable=False, comment="提示词内容")
category = Column(String(50), default="general", comment="分类")
tags = Column(JSON, comment="标签数组")
author_id = Column(String(255), comment="作者用户标识(实例ID:用户ID")
author_name = Column(String(100), comment="作者显示名称")
source_instance = Column(String(255), comment="来源实例标识")
is_official = Column(Boolean, default=False, comment="是否官方提示词")
download_count = Column(Integer, default=0, comment="下载/导入次数")
like_count = Column(Integer, default=0, comment="点赞数")
status = Column(String(20), default="active", comment="状态:active/hidden/deprecated")
created_at = Column(DateTime, server_default=func.now(), comment="创建时间")
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间")
__table_args__ = (
Index('idx_workshop_items_category', 'category'),
Index('idx_workshop_items_status', 'status'),
Index('idx_workshop_items_download_count', 'download_count'),
Index('idx_workshop_items_created_at', 'created_at'),
)
def __repr__(self):
return f"<PromptWorkshopItem(id={self.id}, name={self.name})>"
class PromptSubmission(Base):
"""用户提交的待审核提示词"""
__tablename__ = "prompt_submissions"
id = Column(String(36), primary_key=True, comment="UUID")
submitter_id = Column(String(255), nullable=False, comment="提交者标识(实例ID:用户ID")
submitter_name = Column(String(100), comment="提交者显示名称")
source_instance = Column(String(255), nullable=False, comment="来源实例标识")
name = Column(String(100), nullable=False, comment="提示词名称")
description = Column(Text, comment="提示词描述")
prompt_content = Column(Text, nullable=False, comment="提示词内容")
category = Column(String(50), default="general", comment="分类")
tags = Column(JSON, comment="标签数组")
author_display_name = Column(String(100), comment="希望显示的作者名")
is_anonymous = Column(Boolean, default=False, comment="是否匿名发布")
# 审核相关
status = Column(String(20), default="pending", comment="状态:pending/approved/rejected")
reviewer_id = Column(String(100), comment="审核人ID(云端管理员)")
review_note = Column(Text, comment="审核备注(拒绝理由等)")
reviewed_at = Column(DateTime, comment="审核时间")
workshop_item_id = Column(String(36), comment="审核通过后关联的工坊条目ID")
created_at = Column(DateTime, server_default=func.now(), comment="创建时间")
updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), comment="更新时间")
__table_args__ = (
Index('idx_submissions_submitter', 'submitter_id'),
Index('idx_submissions_source', 'source_instance'),
Index('idx_submissions_status', 'status'),
Index('idx_submissions_created_at', 'created_at'),
)
def __repr__(self):
return f"<PromptSubmission(id={self.id}, name={self.name}, status={self.status})>"
class PromptWorkshopLike(Base):
"""提示词点赞记录"""
__tablename__ = "prompt_workshop_likes"
id = Column(String(36), primary_key=True, comment="UUID")
user_identifier = Column(String(255), nullable=False, comment="用户标识(实例ID:用户ID")
workshop_item_id = Column(String(36), ForeignKey("prompt_workshop_items.id", ondelete="CASCADE"), nullable=False, comment="工坊条目ID")
created_at = Column(DateTime, server_default=func.now(), comment="创建时间")
__table_args__ = (
Index('idx_likes_user_item', 'user_identifier', 'workshop_item_id', unique=True),
)
def __repr__(self):
return f"<PromptWorkshopLike(user={self.user_identifier}, item={self.workshop_item_id})>"