"""信号模型""" from .base import Base from sqlalchemy.orm import Mapped, mapped_column, relationship from sqlalchemy import BigInteger, Integer, VARCHAR, Text, Float, Boolean, ForeignKey, TIMESTAMP from typing import Optional class Signal(Base): __tablename__ = "signals" id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) source: Mapped[Optional[str]] = mapped_column(VARCHAR(50), nullable=True) content: Mapped[Optional[str]] = mapped_column(Text, nullable=True) impact_score: Mapped[Optional[float]] = mapped_column(Float, nullable=True) priority: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="low") processed: Mapped[bool] = mapped_column(Boolean, nullable=False, default=False) strategic_analysis: Mapped[Optional[str]] = mapped_column(Text, nullable=True) tasks_generated: Mapped[Optional[str]] = mapped_column(Text, nullable=True) feishu_item_id: Mapped[Optional[int]] = mapped_column( BigInteger, ForeignKey("feishu_items.id"), nullable=True, index=True ) matched_project_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True, index=True) title: Mapped[Optional[str]] = mapped_column(VARCHAR(200), nullable=True) signal_type: Mapped[Optional[str]] = mapped_column(VARCHAR(50), nullable=True, index=True) summary: Mapped[Optional[str]] = mapped_column(Text, nullable=True) reasoning: Mapped[Optional[str]] = mapped_column(Text, nullable=True) confidence: Mapped[Optional[float]] = mapped_column(Float, nullable=True) recommended_action: Mapped[Optional[str]] = mapped_column(VARCHAR(50), nullable=True) status: Mapped[str] = mapped_column(VARCHAR(50), nullable=False, default="待处理", index=True) planner_status: Mapped[str] = mapped_column(VARCHAR(20), nullable=False, default="pending", index=True) planner_analyzed_at: Mapped[Optional[TIMESTAMP]] = mapped_column(TIMESTAMP, nullable=True) planner_assignee_user_id: Mapped[Optional[int]] = mapped_column(BigInteger, nullable=True) feedbacks = relationship("SignalFeedback", back_populates="signal", cascade="all, delete-orphan")