"""PSA activity log — tracks time entries, note posts, and status updates pushed to PSA.""" import uuid from datetime import datetime, timezone from typing import Optional from sqlalchemy import String, DateTime, ForeignKey, Float from sqlalchemy.orm import Mapped, mapped_column from sqlalchemy.dialects.postgresql import UUID from app.core.database import Base class PsaActivityLog(Base): __tablename__ = "psa_activity_logs" id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) account_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), ForeignKey("accounts.id", ondelete="CASCADE"), nullable=False, index=True ) session_id: Mapped[Optional[uuid.UUID]] = mapped_column( UUID(as_uuid=True), ForeignKey("ai_sessions.id", ondelete="SET NULL"), nullable=True ) activity_type: Mapped[str] = mapped_column(String(50), nullable=False) hours_logged: Mapped[Optional[float]] = mapped_column(Float, nullable=True) psa_ticket_id: Mapped[Optional[str]] = mapped_column(String(100), nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) )