"""事件档案 ORM 模型。""" import uuid from datetime import datetime, date from sqlalchemy import String, DateTime, Date, Integer, Enum as SAEnum from sqlalchemy.orm import Mapped, mapped_column import enum from app.database import Base class EventStatus(str, enum.Enum): ACTIVE = "active" FADING = "fading" DISSIPATING = "dissipating" CLOSED = "closed" class EventLevel(str, enum.Enum): A = "A" B = "B" C = "C" DOMAINS = [ "gateway", "crawler", "reporter", "feishu", "database", "security", "network", "storage", "monitor", "scheduler", "api", "other", ] class Event(Base): __tablename__ = "events" id: Mapped[str] = mapped_column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) title: Mapped[str] = mapped_column(String(255), nullable=False) level: Mapped[EventLevel] = mapped_column(SAEnum(EventLevel), nullable=False) domain: Mapped[str] = mapped_column(String(50), nullable=False, index=True) status: Mapped[EventStatus] = mapped_column(SAEnum(EventStatus), default=EventStatus.ACTIVE, nullable=False, index=True) occurred_date: Mapped[date] = mapped_column(Date, nullable=False) last_reviewed: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) no_new_info_count: Mapped[int] = mapped_column(Integer, default=0) next_review: Mapped[datetime | None] = mapped_column(DateTime, nullable=True) created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow) updated_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)