69 lines
3.0 KiB
Python
69 lines
3.0 KiB
Python
"""
|
||
database/models.py
|
||
ORM 模型,与远程 MySQL(eval_report 库)现有表结构一致:
|
||
- report_templates 模板
|
||
- report_template_sections 模板章节(目录 + 声明)
|
||
- report_section_references 章节参考范文(章节内容入库目标)
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
from datetime import datetime
|
||
from typing import Optional
|
||
|
||
from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, String, Text
|
||
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
|
||
|
||
|
||
class Base(DeclarativeBase):
|
||
pass
|
||
|
||
|
||
class ReportTemplate(Base):
|
||
__tablename__ = "report_templates"
|
||
|
||
id: Mapped[str] = mapped_column(String(64), primary_key=True)
|
||
name: Mapped[str] = mapped_column(String(255), nullable=False)
|
||
description: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||
is_default: Mapped[bool] = mapped_column(Boolean, default=False)
|
||
is_active: Mapped[bool] = mapped_column(Boolean, default=True)
|
||
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|
||
updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|
||
|
||
|
||
class ReportTemplateSection(Base):
|
||
__tablename__ = "report_template_sections"
|
||
|
||
id: Mapped[str] = mapped_column(String(64), primary_key=True)
|
||
template_id: Mapped[str] = mapped_column(
|
||
ForeignKey("report_templates.id", ondelete="CASCADE"), nullable=False
|
||
)
|
||
section_key: Mapped[str] = mapped_column(String(64), nullable=False)
|
||
section_title: Mapped[str] = mapped_column(String(255), nullable=False)
|
||
# 本模块语义:section_prompt 即为该目录生成的"声明"
|
||
section_prompt: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||
section_output_contract: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||
section_order: Mapped[int] = mapped_column(Integer, default=0)
|
||
examples: Mapped[Optional[str]] = mapped_column(Text, nullable=True)
|
||
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|
||
updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|
||
|
||
|
||
class ReportSectionReference(Base):
|
||
"""章节参考范文(章节内容入库目标,格式与远程 MySQL 现有表一致)。"""
|
||
|
||
__tablename__ = "report_section_references"
|
||
|
||
id: Mapped[str] = mapped_column(String(64), primary_key=True)
|
||
# 关联模板(与 report_template_sections.template_id 一致);历史数据可能为空
|
||
template_id: Mapped[Optional[str]] = mapped_column(
|
||
ForeignKey("report_templates.id", ondelete="CASCADE"), nullable=True, index=True
|
||
)
|
||
source_file: Mapped[str] = mapped_column(String(255), nullable=False)
|
||
section_key: Mapped[str] = mapped_column(String(64), nullable=False)
|
||
section_title: Mapped[str] = mapped_column(String(255), nullable=False)
|
||
section_order: Mapped[int] = mapped_column(Integer, default=0)
|
||
content: Mapped[str] = mapped_column(Text, nullable=False)
|
||
created_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|
||
updated_at: Mapped[datetime] = mapped_column(DateTime, nullable=False)
|