35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import DateTime, ForeignKey, Integer, String, Text
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from .base import Base
|
|
|
|
|
|
class Alert(Base):
|
|
__tablename__ = "alerts"
|
|
|
|
id: Mapped[int] = mapped_column(Integer(), autoincrement=True, primary_key=True)
|
|
device_id: Mapped[int] = mapped_column(
|
|
Integer(), ForeignKey("devices.id", ondelete="CASCADE"), nullable=False, index=True
|
|
)
|
|
# "open" | "acknowledged" | "resolved"
|
|
status: Mapped[str] = mapped_column(String(20), nullable=False, default="open")
|
|
message: Mapped[str] = mapped_column(Text(), nullable=False)
|
|
|
|
created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), nullable=False)
|
|
acknowledged_at: Mapped[Optional[datetime]] = mapped_column(
|
|
DateTime(timezone=True), nullable=True
|
|
)
|
|
acknowledged_by: Mapped[Optional[int]] = mapped_column(
|
|
Integer(), ForeignKey("users.id", ondelete="SET NULL"), nullable=True
|
|
)
|
|
resolved_at: Mapped[Optional[datetime]] = mapped_column(
|
|
DateTime(timezone=True), nullable=True
|
|
)
|
|
|
|
device: Mapped["Device"] = relationship("Device")
|
|
acknowledger: Mapped[Optional["User"]] = relationship(
|
|
"User", foreign_keys=[acknowledged_by]
|
|
)
|