40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
from sqlalchemy import Column, String, Integer, Float, Date, DateTime, Text, Boolean, JSON
|
|
from sqlalchemy.sql import func
|
|
from .database import Base
|
|
from datetime import datetime
|
|
|
|
class Topic(Base):
|
|
__tablename__ = "topics"
|
|
|
|
id = Column(String, primary_key=True, index=True)
|
|
title = Column(String, nullable=False)
|
|
field = Column(String, nullable=False)
|
|
format = Column(String)
|
|
core_concept = Column(Text)
|
|
audience_pain = Column(Text)
|
|
unique_angle = Column(Text)
|
|
priority = Column(String) # 高/中
|
|
priority_score = Column(Integer, default=0)
|
|
total_score = Column(Float)
|
|
status = Column(String, default="pending") # pending/draft/ready/published
|
|
cases = Column(JSON, default=list)
|
|
source_file = Column(String)
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
|
|
ready_at = Column(Date)
|
|
published_at = Column(Date)
|
|
compliance_score = Column(Integer)
|
|
platform_urls = Column(JSON, default=dict) # {"zhihu": "...", "wechat": "...", "xiaohongshu": "..."}
|
|
|
|
class Article(Base):
|
|
__tablename__ = "articles"
|
|
|
|
id = Column(String, primary_key=True) # e.g., A01_zhihu
|
|
topic_id = Column(String, nullable=False)
|
|
platform = Column(String, nullable=False)
|
|
file_path = Column(String, nullable=False)
|
|
status = Column(String, default="draft") # draft/optimized/published
|
|
created_at = Column(DateTime(timezone=True), server_default=func.now())
|
|
compliance_score = Column(Integer)
|
|
html_content = Column(Text) # 可缓存HTML内容以便预览
|