""" API Key Model — Dealix AI Revenue OS Manages API keys for external integrations and developer access. Adapted from VoXc2/dealix repository. """ from datetime import datetime from sqlalchemy import String, Boolean, DateTime, ForeignKey, Integer, Text from sqlalchemy.orm import Mapped, mapped_column, relationship from app.models.base import TenantModel class APIKey(TenantModel): __tablename__ = "api_keys" id: Mapped[int] = mapped_column(primary_key=True, index=True) name: Mapped[str] = mapped_column(String(100), nullable=False) name_ar: Mapped[str | None] = mapped_column(String(100)) key_hash: Mapped[str] = mapped_column(String(255), unique=True, nullable=False) key_prefix: Mapped[str] = mapped_column(String(20), nullable=False) permissions: Mapped[str | None] = mapped_column(Text) # JSON: ["read_leads", "write_deals"] last_used_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) request_count: Mapped[int] = mapped_column(Integer, default=0) rate_limit: Mapped[int] = mapped_column(Integer, default=1000) # per hour is_active: Mapped[bool] = mapped_column(Boolean, default=True) expires_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True)) created_at: Mapped[datetime] = mapped_column(DateTime(timezone=True), default=datetime.utcnow) created_by: Mapped[int | None] = mapped_column(ForeignKey("users.id")) class AppSetting(TenantModel): __tablename__ = "app_settings" key: Mapped[str] = mapped_column(String(100), primary_key=True) value: Mapped[str | None] = mapped_column(Text) value_type: Mapped[str] = mapped_column(String(20), default="string") # string, int, bool, json description: Mapped[str | None] = mapped_column(Text) description_ar: Mapped[str | None] = mapped_column(Text) is_public: Mapped[bool] = mapped_column(Boolean, default=False) updated_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=datetime.utcnow, onupdate=datetime.utcnow, )