from datetime import datetime from sqlalchemy import DateTime, ForeignKey, String, Text, func from sqlalchemy.dialects.postgresql import JSONB from sqlalchemy.orm import Mapped, mapped_column, relationship from app.database import Base class AgentCommand(Base): __tablename__ = "agent_commands" id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True) command_uuid: Mapped[str] = mapped_column(String(36), unique=True, index=True) host_id: Mapped[int] = mapped_column(ForeignKey("hosts.id", ondelete="CASCADE"), index=True) event_id: Mapped[int | None] = mapped_column(ForeignKey("events.id", ondelete="SET NULL"), nullable=True) command_type: Mapped[str] = mapped_column(String(32)) params: Mapped[dict | None] = mapped_column(JSONB, default=dict) status: Mapped[str] = mapped_column(String(16), default="pending", index=True) result_stdout: Mapped[str | None] = mapped_column(Text) result_stderr: Mapped[str | None] = mapped_column(Text) requested_by: Mapped[str | None] = mapped_column(String(128)) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), server_default=func.now()) completed_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) host: Mapped["Host"] = relationship(back_populates="agent_commands") event: Mapped["Event | None"] = relationship()