import uuid from datetime import datetime from sqlalchemy import DateTime, ForeignKey, Index, String, func from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import Mapped, mapped_column from app.database import Base class APIKey(Base): __tablename__ = "api_keys" id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), primary_key=True, default=uuid.uuid4, ) user_id: Mapped[uuid.UUID] = mapped_column( UUID(as_uuid=True), nullable=False, index=True, ) engine_type: Mapped[str] = mapped_column(String(20), nullable=False) encrypted_key: Mapped[str] = mapped_column(String(500), nullable=False) key_hint: Mapped[str] = mapped_column(String(50), nullable=False) key_source: Mapped[str] = mapped_column(String(10), default="user") status: Mapped[str] = mapped_column(String(20), default="active") priority: Mapped[int] = mapped_column(default=0) last_verified_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True), nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), nullable=False, ) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False, ) __table_args__ = ( Index("idx_api_keys_user_engine", "user_id", "engine_type"), Index("idx_api_keys_engine_status", "engine_type", "status"), )