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 AudienceExportNotFoundError from dmp.audiences.models import AudienceExport from dmp.audiences.repositories import AudienceExportRepository @dataclass class UpdateAudienceExportRequest: export_id: str status: AudienceExportStatus zip_key: str | None @singleton class UpdateAudienceExportHandler: def __init__( self, db: DefaultDB, audience_export_repository: AudienceExportRepository, ) -> None: self.db = db self.audience_export_repository = audience_export_repository @transactional def handle(self, request: UpdateAudienceExportRequest) -> AudienceExport: export = self.audience_export_repository.get(request.export_id) if export is None: raise AudienceExportNotFoundError export.update_status(request.status) export.zip_key = request.zip_key self.audience_export_repository.add(export) return export