from __future__ import annotations from datetime import datetime from sqlmodel import Field, SQLModel from app.core.constants import AlertSeverity from app.db.base import TimestampMixin class AlertRule(TimestampMixin, SQLModel, table=True): __tablename__ = "alert_rules" id: int | None = Field(default=None, primary_key=True) name: str = Field(max_length=100) description: str = Field(default="", max_length=500) metric: str = Field(max_length=100) condition: str = Field(max_length=50) threshold: float severity: str = Field(default=AlertSeverity.WARNING, max_length=20) is_enabled: bool = Field(default=True) device_group_id: int | None = Field(default=None, foreign_key="device_groups.id") created_by: int | None = Field(default=None, foreign_key="users.id") class Alert(TimestampMixin, SQLModel, table=True): __tablename__ = "alerts" id: int | None = Field(default=None, primary_key=True) rule_id: int | None = Field(default=None, foreign_key="alert_rules.id") device_id: int | None = Field(default=None, foreign_key="devices.id") severity: str = Field(default=AlertSeverity.WARNING, max_length=20) message: str = Field(max_length=500) is_acknowledged: bool = Field(default=False) acknowledged_by: int | None = Field(default=None, foreign_key="users.id") acknowledged_at: datetime | None = Field(default=None)