from collections.abc import Sequence import sqlalchemy as sa from dmp.ad_accounts.enums import AdAccountPlatform from dmp.ad_accounts.models import AdAccountDbt from dmp.adapters.db import ReportingRepository class AdAccountDbtRepository(ReportingRepository[AdAccountDbt]): def find_by_ids_and_platform( self, ids: list[str], platform: AdAccountPlatform ) -> Sequence[AdAccountDbt]: if not ids: return [] query = sa.select(AdAccountDbt).where( sa.and_( AdAccountDbt.id.in_(ids), AdAccountDbt.platform == platform, ) ) result = self.db.session.execute(query) return result.scalars().all() def exists_by_schema_and_platform( self, schema: str, platform: AdAccountPlatform ) -> bool: query = sa.select( sa.select(1) .exists() .where( sa.and_( AdAccountDbt.source_schema == schema, AdAccountDbt.platform == platform, ) ) ) result = self.db.session.execute(query) return bool(result.scalar_one()) def find_by_schemas_and_platform( self, schemas: list[str], platform: AdAccountPlatform ) -> Sequence[AdAccountDbt]: query = sa.select(AdAccountDbt).where( sa.and_( AdAccountDbt.source_schema.in_(schemas), AdAccountDbt.platform == platform, ) ) result = self.db.session.execute(query) return result.scalars().all()