diff --git a/platform/backend/app/api/topics.py b/platform/backend/app/api/topics.py index 46060b3..a32a96b 100644 --- a/platform/backend/app/api/topics.py +++ b/platform/backend/app/api/topics.py @@ -31,6 +31,7 @@ def list_topics( status: Optional[str] = None, today: Optional[bool] = None, tag: Optional[str] = None, + series: Optional[str] = None, search: Optional[str] = None, sort_by: str = Query("priority_score", enum=["priority_score", "created_at", "title", "updated_at"]), order: str = Query("desc", enum=["asc", "desc"]), @@ -54,6 +55,8 @@ def list_topics( query = query.filter(func.date(Topic.created_at) == date.today()) if tag: query = query.filter(Topic.tags.contains([tag])) + if series: + query = query.filter(Topic.series == series) if search: query = query.filter(Topic.title.contains(search)) diff --git a/platform/backend/app/database.py b/platform/backend/app/database.py index fa2c54b..675c897 100644 --- a/platform/backend/app/database.py +++ b/platform/backend/app/database.py @@ -131,6 +131,7 @@ def init_db(): ("search_rankings", "org_id", "VARCHAR DEFAULT 'default'"), ("geo_readiness_scores", "org_id", "VARCHAR DEFAULT 'default'"), ("articles", "org_id", "VARCHAR DEFAULT 'default'"), + ("topics", "series", "VARCHAR"), ]: try: conn.execute(text(f"ALTER TABLE {table} ADD COLUMN IF NOT EXISTS {col} {typ}")) diff --git a/platform/backend/app/models.py b/platform/backend/app/models.py index d353372..abbd61f 100644 --- a/platform/backend/app/models.py +++ b/platform/backend/app/models.py @@ -265,6 +265,7 @@ class Topic(Base): platform_urls = Column(JSON, default=dict) lock_by = Column(String, nullable=True) lock_at = Column(DateTime, nullable=True) + series = Column(String, nullable=True, index=True, comment="所属栏目,如:AI工具实测周报、科技人文思辨") field = relationship("TopicField", backref="topics") diff --git a/platform/backend/app/schemas.py b/platform/backend/app/schemas.py index 5c7a403..cb44cd8 100644 --- a/platform/backend/app/schemas.py +++ b/platform/backend/app/schemas.py @@ -76,6 +76,7 @@ class TopicBase(BaseModel): scoring_data: Dict[str, Any] = {} lock_by: Optional[str] = None lock_at: Optional[datetime] = None + series: Optional[str] = None class TopicCreate(BaseModel): @@ -90,6 +91,7 @@ class TopicCreate(BaseModel): tags: List[str] = [] custom_data: Dict[str, Any] = {} scoring_data: Dict[str, Any] = {} + series: Optional[str] = None class TopicAnalyzeRequest(BaseModel): @@ -123,6 +125,7 @@ class TopicUpdate(BaseModel): scoring_data: Optional[Dict[str, Any]] = None priority_score: Optional[int] = None total_score: Optional[float] = None + series: Optional[str] = None class TopicResponse(TopicBase):