feat: add admin dashboard, pipeline service, lightbox, and update dependencies

This commit is contained in:
2026-06-09 09:32:10 +08:00
parent 0d293422ac
commit 32978b3fc5
50 changed files with 4054 additions and 1618 deletions
+13 -9
View File
@@ -2,21 +2,20 @@
from __future__ import annotations
import json
import logging
import shutil
from datetime import date, datetime, timezone
from pathlib import Path
from datetime import date
from sqlalchemy import delete, select, text
from sqlalchemy import select, text
from sqlalchemy.orm import Session
from app.models import (
CrawlLog,
DataDeleteJob,
Paper,
TaskLock,
)
from app.utils import PAPERS_DIR, TMP_DIR
from app.utils import PAPERS_DIR, TMP_DIR, utc_now
logger = logging.getLogger(__name__)
@@ -39,7 +38,7 @@ def cleanup_tmp(max_age_hours: int = _MAX_TMP_AGE_HOURS) -> dict:
if not TMP_DIR.exists():
return {"scanned": 0, "removed": 0, "errors": []}
now = datetime.now(timezone.utc)
now = utc_now()
cutoff = now.timestamp() - (max_age_hours * 3600)
scanned = 0
removed = 0
@@ -96,7 +95,7 @@ async def delete_papers_by_date_range(
Returns:
删除结果统计
"""
now = datetime.now(timezone.utc)
now = utc_now()
# 查询目标论文
papers = (
@@ -195,7 +194,7 @@ async def delete_papers_by_date_range(
job.status = job_status
job.paper_count = deleted
job.completed_at = datetime.now(timezone.utc)
job.completed_at = utc_now()
if job_error:
job.error = job_error[:4000]
db.commit()
@@ -205,9 +204,14 @@ async def delete_papers_by_date_range(
task="delete",
status=job_status,
started_at=now,
completed_at=datetime.now(timezone.utc),
completed_at=utc_now(),
papers_found=total,
papers_new=deleted,
details_json=json.dumps({
"total_before": total,
"deleted": deleted,
"failed": len(failed_items),
}, ensure_ascii=False),
error=job_error,
)
db.add(log_entry)