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 ows_text_campaigns.assets.services import AssetService from ows_text_campaigns.assets.types import UploadCredentials from ows_text_campaigns.campaigns.services import CampaignService @dataclass(kw_only=True) class CreateCampaignAttachmentUploadCredentialsRequest(AuthRequest): campaign_id: str filename: str @singleton class CreateCampaignAttachmentUploadCredentialsHandler: permission = Permission("text_campaign", "edit") def __init__( self, auth_service: AuthService, asset_service: AssetService, campaign_service: CampaignService, ) -> None: self.auth_service = auth_service self.asset_service = asset_service self.campaign_service = campaign_service def handle( self, request: CreateCampaignAttachmentUploadCredentialsRequest ) -> UploadCredentials: campaign = self.campaign_service.get_campaign(request.campaign_id) self.auth_service.check_account_resource( request.identity_id, account=campaign.account, permission=self.permission, resource_id=campaign.id, ) return self.asset_service.generate_upload_credentials( key=self.campaign_service.create_attachment_key( campaign_id=campaign.id, filename=request.filename ), )