from __future__ import annotations from typing import Self import sqlalchemy as sa from fansifter_common.adapters.db.models import Query from sqlalchemy.orm import Mapped, mapped_column from app.adapters.db import Model from app.dsp.enums import DSPClientName, DSPClientStatus, DSPId class DSPClientQuery(Query["DSPClient"]): def active(self) -> Self: return self.where(DSPClient.status == DSPClientStatus.active) class DSPClient(Model, kw_only=True): __tablename__ = "dsp_client" __table_args__ = (sa.UniqueConstraint("dsp_id", "client_id"),) id: Mapped[int] = mapped_column(primary_key=True, init=False) dsp_id: Mapped[DSPId] client_id: Mapped[str] name: Mapped[DSPClientName] = mapped_column(unique=True) display_name: Mapped[str] status: Mapped[DSPClientStatus] = mapped_column(default=DSPClientStatus.active) nominal_rps: Mapped[int | None] = mapped_column(default=None) query = DSPClientQuery.as_descriptor()