from datetime import datetime, timezone from sqlalchemy import DateTime, ForeignKey, Integer, String, Text from sqlalchemy.orm import Mapped, mapped_column from app.db.session import Base class Action(Base): __tablename__ = "actions" id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True) server_id: Mapped[int] = mapped_column(ForeignKey("servers.id"), index=True) service_id: Mapped[int | None] = mapped_column(ForeignKey("managed_services.id"), nullable=True) target_type: Mapped[str] = mapped_column(String(32), default="service") target_name: Mapped[str] = mapped_column(String(128)) action: Mapped[str] = mapped_column(String(32)) status: Mapped[str] = mapped_column(String(32), default="pending") source: Mapped[str] = mapped_column(String(32), default="web") requested_by: Mapped[int] = mapped_column(ForeignKey("users.id"), index=True) result_message: Mapped[str | None] = mapped_column(Text, nullable=True) requested_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), ) completed_at: Mapped[datetime | None] = mapped_column( DateTime(timezone=True), nullable=True, )