import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Integer, Text, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column, relationship from api.models.base import Base, new_uuid class TokenEvent(Base): __tablename__ = "token_events" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=new_uuid ) task_id: Mapped[uuid.UUID | None] = mapped_column( UUID(as_uuid=True), ForeignKey("tasks.id", ondelete="SET NULL"), nullable=True, index=True ) workstream_id: Mapped[uuid.UUID | None] = mapped_column( UUID(as_uuid=True), ForeignKey("workstreams.id", ondelete="SET NULL"), nullable=True, index=True ) repo_id: Mapped[uuid.UUID | None] = mapped_column( UUID(as_uuid=True), ForeignKey("managed_repos.id", ondelete="SET NULL"), nullable=True, index=True ) session_id: Mapped[str | None] = mapped_column(Text, nullable=True) model: Mapped[str | None] = mapped_column(Text, nullable=True) tokens_in: Mapped[int] = mapped_column(Integer, nullable=False) tokens_out: Mapped[int] = mapped_column(Integer, nullable=False) agent: Mapped[str | None] = mapped_column(Text, nullable=True) ref_type: Mapped[str | None] = mapped_column(Text, nullable=True) ref_id: Mapped[str | None] = mapped_column(Text, nullable=True) note: Mapped[str | None] = mapped_column(Text, nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, index=True ) task: Mapped["Task | None"] = relationship("Task", lazy="selectin") # noqa: F821 workstream: Mapped["Workstream | None"] = relationship("Workstream", lazy="selectin") # noqa: F821 repo: Mapped["ManagedRepo | None"] = relationship("ManagedRepo", lazy="selectin") # noqa: F821