feat: add admin dashboard, pipeline service, lightbox, and update dependencies
This commit is contained in:
+34
-7
@@ -1,6 +1,6 @@
|
||||
"""SQLAlchemy ORM 模型 — papers, authors, tags, summaries, user data, logs, locks。"""
|
||||
|
||||
from datetime import date, datetime
|
||||
from enum import StrEnum
|
||||
|
||||
from sqlalchemy import (
|
||||
Boolean,
|
||||
@@ -8,17 +8,29 @@ from sqlalchemy import (
|
||||
Date,
|
||||
DateTime,
|
||||
ForeignKey,
|
||||
Index,
|
||||
Integer,
|
||||
String,
|
||||
Text,
|
||||
UniqueConstraint,
|
||||
)
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm import joinedload, relationship
|
||||
|
||||
from app.database import Base
|
||||
|
||||
|
||||
# ── 枚举 ────────────────────────────────────────────────────────────────
|
||||
|
||||
|
||||
class SummaryState(StrEnum):
|
||||
"""总结状态枚举 — 对应 summary_status.status 列。"""
|
||||
|
||||
PENDING = "pending"
|
||||
PROCESSING = "processing"
|
||||
DONE = "done"
|
||||
FAILED = "failed"
|
||||
PERMANENT_FAILURE = "permanent_failure"
|
||||
|
||||
|
||||
# ── papers ──────────────────────────────────────────────────────────────
|
||||
class Paper(Base):
|
||||
__tablename__ = "papers"
|
||||
@@ -35,10 +47,6 @@ class Paper(Base):
|
||||
hf_url = Column(String)
|
||||
arxiv_url = Column(String)
|
||||
pdf_url = Column(String)
|
||||
source_url = Column(String)
|
||||
asset_status = Column(String, default="not_downloaded")
|
||||
asset_error = Column(String)
|
||||
meta_path = Column(String)
|
||||
summary_path = Column(String)
|
||||
raw_output_path = Column(String)
|
||||
summary_quality = Column(String)
|
||||
@@ -170,6 +178,7 @@ class CrawlLog(Base):
|
||||
papers_found = Column(Integer)
|
||||
papers_new = Column(Integer)
|
||||
error = Column(Text)
|
||||
details_json = Column(Text) # 任务专用元数据 JSON(如 cleanup: {scanned, removed})
|
||||
started_at = Column(DateTime, nullable=False)
|
||||
completed_at = Column(DateTime)
|
||||
|
||||
@@ -244,3 +253,21 @@ class DataDeleteJob(Base):
|
||||
error = Column(Text)
|
||||
started_at = Column(DateTime, nullable=False)
|
||||
completed_at = Column(DateTime)
|
||||
|
||||
|
||||
# ── 常用 joinedload 选项集 ──────────────────────────────────────────────
|
||||
# 避免在各路由/服务中重复写 .options(joinedload(Paper.authors), ...)
|
||||
|
||||
PAPER_DEFAULT_LOAD = (
|
||||
joinedload(Paper.authors),
|
||||
joinedload(Paper.tags),
|
||||
joinedload(Paper.summary_status),
|
||||
)
|
||||
|
||||
PAPER_FULL_LOAD = (
|
||||
joinedload(Paper.authors),
|
||||
joinedload(Paper.tags),
|
||||
joinedload(Paper.summary_status),
|
||||
joinedload(Paper.bookmark),
|
||||
joinedload(Paper.reading_status),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user