feat(models): add org_id to Article, PublishRecord, ContentMetrics, SearchRanking, GeoReadinessScore

- Add org_id column to 5 models with default='default'
- Update to_dict() methods for ContentMetrics, SearchRanking, GeoReadinessScore
- Add ALTER TABLE migrations in database.py init_db()
- Add org_id to 6 Pydantic response schemas
- Add require_role() helper factory in auth.py
This commit is contained in:
Yuzhiran Dev
2026-06-17 14:27:27 +08:00
parent 00431c827b
commit dcfeccc97b
6 changed files with 42 additions and 3 deletions
+8
View File
@@ -280,6 +280,7 @@ class Article(Base):
id = Column(String, primary_key=True)
topic_id = Column(String, ForeignKey("topics.id"), nullable=False)
org_id = Column(String, default="default", nullable=True)
platform = Column(String, nullable=False)
file_path = Column(String, nullable=False)
title = Column(String, nullable=True)
@@ -302,6 +303,7 @@ class PublishRecord(Base):
platform = Column(String, nullable=False)
action = Column(String, nullable=False)
status = Column(String, nullable=False)
org_id = Column(String, default="default", nullable=True)
operator = Column(String, nullable=True)
description = Column(Text, nullable=True)
suggestion = Column(Text, nullable=True)
@@ -357,6 +359,7 @@ class ContentMetrics(Base):
id = Column(Integer, primary_key=True, index=True, autoincrement=True)
topic_id = Column(String, ForeignKey("topics.id"), nullable=False, index=True)
platform = Column(String, nullable=False)
org_id = Column(String, default="default", nullable=True)
publish_url = Column(String, nullable=True)
views = Column(Integer, default=0)
likes = Column(Integer, default=0)
@@ -382,6 +385,7 @@ class ContentMetrics(Base):
"id": self.id,
"topic_id": self.topic_id,
"platform": self.platform,
"org_id": self.org_id,
"publish_url": self.publish_url,
"views": self.views,
"likes": self.likes,
@@ -869,6 +873,7 @@ class SearchRanking(Base):
article_id = Column(String, ForeignKey("articles.id"), nullable=True)
topic_id = Column(String, ForeignKey("topics.id"), nullable=True)
keyword = Column(String, nullable=False, index=True)
org_id = Column(String, default="default", nullable=True)
platform = Column(String, nullable=True)
search_engine = Column(String, default="bing") # bing / baidu / google
position = Column(Integer, nullable=True) # 搜索排名位置(null = 未上榜)
@@ -888,6 +893,7 @@ class SearchRanking(Base):
"article_id": self.article_id,
"topic_id": self.topic_id,
"keyword": self.keyword,
"org_id": self.org_id,
"platform": self.platform,
"search_engine": self.search_engine,
"position": self.position,
@@ -911,6 +917,7 @@ class GeoReadinessScore(Base):
article_id = Column(String, ForeignKey("articles.id"), nullable=True, index=True)
topic_id = Column(String, ForeignKey("topics.id"), nullable=True)
platform = Column(String, nullable=True)
org_id = Column(String, default="default", nullable=True)
total_score = Column(Integer, default=0) # 总分 0-100
has_schema = Column(Boolean, default=False) # 是否有结构化数据
schema_types = Column(String, nullable=True) # 含有的 schema 类型列表
@@ -928,6 +935,7 @@ class GeoReadinessScore(Base):
"article_id": self.article_id,
"topic_id": self.topic_id,
"platform": self.platform,
"org_id": self.org_id,
"total_score": self.total_score,
"has_schema": self.has_schema,
"schema_types": self.schema_types,