from dataclasses import dataclass from anydi import singleton from dmp.adapters.db import DefaultDB, transactional from dmp.audiences.enums import AudienceExportStatus from dmp.audiences.exceptions import AudienceShareNotFoundError from dmp.audiences.models import AudienceShare from dmp.audiences.repositories import AudienceShareRepository @dataclass class UpdateAudienceShareRequest: share_id: str status: AudienceExportStatus processed_fans: int | None @singleton class UpdateAudienceShareHandler: def __init__( self, db: DefaultDB, audience_share_repository: AudienceShareRepository, ) -> None: self.db = db self.audience_share_repository = audience_share_repository @transactional def handle(self, request: UpdateAudienceShareRequest) -> AudienceShare: share = self.audience_share_repository.get(request.share_id) if share is None: raise AudienceShareNotFoundError share.update_status(request.status) if request.processed_fans: share.processed_fans = request.processed_fans self.audience_share_repository.add(share) return share