from typing import Sequence from app.adapters.db.repositories import Repository from anydi import singleton from app.opus_clip.models import OpusClipProject import sqlalchemy as sa from pydantic import BaseModel, TypeAdapter class ClipsPerAsset(BaseModel): asset_id: str clips: int ClipsPerAssetValidator = TypeAdapter(list[ClipsPerAsset]) @singleton class OpusClipProjectRepository(Repository[OpusClipProject]): def find_by_asset_id(self, asset_id: str) -> Sequence[OpusClipProject]: """Retrieve multiple assets by their global_participant_id""" query = sa.select(OpusClipProject).where(OpusClipProject.asset_id == asset_id) return self.db.session.execute(query).scalars().all() def find_number_of_clips_per_asset_id(self) -> Sequence[ClipsPerAsset]: query = self.db.query_from_template( "clips_per_asset.sql", ) response = ClipsPerAssetValidator.validate_python( self.db.session.execute(query).mappings(), ) return response