from dataclasses import dataclass from anydi import singleton from dmp.adapters.db import DefaultDB, transactional from dmp.tiktok.exceptions import TikTokAudienceNotFoundError, TikTokAudienceUpdateError from dmp.tiktok.models import TikTokAudience from dmp.tiktok.repositories import TikTokAudienceRepository @dataclass class UpdateTikTokAudienceRequest: audience_id: str external_id: str @singleton class UpdateTikTokAudienceHandler: def __init__( self, db: DefaultDB, tiktok_audience_repository: TikTokAudienceRepository, ) -> None: self.db = db self.tiktok_audience_repository = tiktok_audience_repository @transactional def handle(self, request: UpdateTikTokAudienceRequest) -> TikTokAudience: tiktok_audience = self.tiktok_audience_repository.get(request.audience_id) if tiktok_audience is None: raise TikTokAudienceNotFoundError if tiktok_audience.external_id: raise TikTokAudienceUpdateError tiktok_audience.external_id = request.external_id self.tiktok_audience_repository.add(tiktok_audience) return tiktok_audience