from collections.abc import Sequence from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthRequest from fansifter_common.auth.services import AuthService from fansifter_common.auth.types import Permission from dmp.ad_reporting.repositories import ( AdReportingCampaignRepository, AdReportingReportRepository, ) @dataclass(kw_only=True) class GetAdReportingReportsArtistsRequest(AuthRequest): report_id: str | None @singleton class GetAdReportingReportsArtistsHandler: permission = Permission("ad_report", "view") def __init__( self, auth_service: AuthService, campaign_repository: AdReportingCampaignRepository, report_repository: AdReportingReportRepository, ) -> None: self.auth_service = auth_service self.campaign_repository = campaign_repository self.report_repository = report_repository def handle(self, request: GetAdReportingReportsArtistsRequest) -> Sequence[str]: self.auth_service.check_owned_resource( request.identity_id, permission=self.permission, ) return ( self.campaign_repository.find_unique_global_participant_ids_by_identity_id( identity_id=request.identity_id, report_id=request.report_id ) )