Initial commit: yu-zhi-ran platform with automation integration

This commit is contained in:
lt
2026-04-19 14:05:09 +08:00
commit 3cb2df51c8
209 changed files with 80379 additions and 0 deletions
+65
View File
@@ -0,0 +1,65 @@
import json
from datetime import datetime, date
from pathlib import Path
from sqlalchemy.orm import Session
from ..database import SessionLocal
from ..models import Topic
import os
# 计算项目根目录(从本文件位置上升4层)
PROJECT_ROOT = Path(__file__).resolve().parents[4]
if os.getenv('PROJECT_ROOT'):
PROJECT_ROOT = Path(os.getenv('PROJECT_ROOT'))
TOPICS_FILE = PROJECT_ROOT / "automation" / "data" / "sustainability_topics.json"
def sync_topic_to_db(topic_id: str, db: Session = None) -> Topic:
topics = json.loads(TOPICS_FILE.read_text(encoding='utf-8'))
topic_data = next((t for t in topics if t['id'] == topic_id), None)
if not topic_data:
raise ValueError(f"Topic {topic_id} not found in file")
close_db = False
if db is None:
db = SessionLocal()
close_db = True
try:
db_topic = db.query(Topic).filter(Topic.id == topic_id).first()
if db_topic is None:
db_topic = Topic(
id=topic_data['id'],
title=topic_data['title'],
field=topic_data['field'],
format=topic_data.get('format'),
core_concept=topic_data.get('core_concept'),
audience_pain=topic_data.get('audience_pain'),
unique_angle=topic_data.get('unique_angle'),
priority=topic_data.get('priority'),
priority_score=topic_data.get('priority_score', 0),
total_score=topic_data.get('total_score')
)
db.add(db_topic)
db_topic.status = topic_data.get('status', db_topic.status)
db_topic.ready_at = datetime.strptime(topic_data['ready_at'], '%Y-%m-%d').date() if topic_data.get('ready_at') else None
db_topic.published_at = datetime.strptime(topic_data['published_at'], '%Y-%m-%d').date() if topic_data.get('published_at') else None
db_topic.compliance_score = topic_data.get('compliance_score', db_topic.compliance_score)
db_topic.platform_urls = topic_data.get('platform_urls', {})
db_topic.updated_at = datetime.now()
db.commit()
db.refresh(db_topic)
return db_topic
finally:
if close_db:
db.close()
def sync_all_topics():
db = SessionLocal()
try:
topics = json.loads(TOPICS_FILE.read_text(encoding='utf-8'))
for t in topics:
sync_topic_to_db(t['id'], db)
print(f"✅ 同步 {len(topics)} 个选题到数据库")
finally:
db.close()
if __name__ == "__main__":
sync_all_topics()