feat: implement backend knowledge management

This commit is contained in:
2026-10-15 19:24:21 +08:00
parent b6adddee42
commit 6eb1d12580
33 changed files with 1604 additions and 55 deletions
+20 -5
View File
@@ -1,14 +1,29 @@
from datetime import datetime
from sqlalchemy import DateTime, Integer, String, Text, func
from sqlalchemy.orm import Mapped, mapped_column
from app.db.session import Base
class KnowledgeItem(Base):
from sqlalchemy import CheckConstraint, DateTime, ForeignKey, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column
from app.db.session import Base
from app.models.catalog import Versioned
class KnowledgeItem(Versioned, Base):
__tablename__ = "knowledge_items"
__table_args__ = (
CheckConstraint(
"verification_status IN ('pending', 'verified', 'rejected')",
name="ck_knowledge_verification_status",
),
)
id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True)
title: Mapped[str] = mapped_column(String(250), nullable=False, index=True)
category: Mapped[str] = mapped_column(String(80), nullable=False, default="未分类")
content: Mapped[str] = mapped_column(Text, nullable=False)
source_url: Mapped[str | None] = mapped_column(String(1000), nullable=True)
verification_status: Mapped[str] = mapped_column(String(30), nullable=False, default="pending")
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now())
source_id: Mapped[int | None] = mapped_column(ForeignKey("sources.id"), index=True)
document_id: Mapped[int | None] = mapped_column(ForeignKey("documents.id"), index=True)
collected_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
reviewer: Mapped[str | None] = mapped_column(String(100))
reviewed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
verification_notes: Mapped[str | None] = mapped_column(Text)