refactor: extract admin business logic to services, introduce job queue, add derived index helpers
- Move DB operations from routes/admin.py to services/admin.py (get_logs_context, query_summary_statuses, retry_failed, delete/reset operations) - Add services/jobs.py with Job/JobEvent-based async job queue (create_job, run_job, enqueue_job) - Add services/derived.py with FTS5 reindex and paper index deletion helpers - Refactor scheduler to use job queue instead of direct pipeline calls - Add heartbeat_at/expires_at to TaskLock for lock health tracking - Remove DESIGN_REVIEW.md - Update tests: remove redundant integration tests, add unit tests for new services
This commit is contained in:
@@ -11,8 +11,7 @@ from zoneinfo import ZoneInfo
|
||||
|
||||
from app.config import settings
|
||||
from app.database import SessionLocal
|
||||
from app.services.pipeline import run_pipeline
|
||||
from app.services.crawler import refresh_upvotes
|
||||
from app.services.jobs import create_job, run_job
|
||||
from app.utils import today_str
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -112,7 +111,13 @@ async def _daily_pipeline() -> None:
|
||||
|
||||
db: Session = SessionLocal()
|
||||
try:
|
||||
await run_pipeline(db, today, owner="daily_pipeline")
|
||||
job = create_job(
|
||||
db,
|
||||
"pipeline_daily",
|
||||
owner="daily_pipeline",
|
||||
payload={"target_date": today},
|
||||
)
|
||||
await run_job(db, job.id)
|
||||
except RuntimeError:
|
||||
logger.warning("Daily pipeline already running for %s, skipping", today)
|
||||
except Exception:
|
||||
@@ -125,7 +130,8 @@ async def _upvote_refresh() -> None:
|
||||
"""刷新最近 N 天论文的 upvotes。"""
|
||||
db: Session = SessionLocal()
|
||||
try:
|
||||
result = await refresh_upvotes(db)
|
||||
job = create_job(db, "refresh_upvotes", owner="upvote_refresh", payload={})
|
||||
result = await run_job(db, job.id)
|
||||
logger.info(
|
||||
"Upvote refresh completed: status=%s updated=%d",
|
||||
result.get("status"),
|
||||
|
||||
Reference in New Issue
Block a user