PMFlow/backend/app/models/signal.py

35 lines
2.1 KiB
Python

"""信号模型"""
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")