from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.requests import AuthRequest from fansifter_common.auth.types import Permission from ows_text_campaigns.artist.services import ArtistSettingsService from ows_text_campaigns.artist.validators import ArtistSettingsValidator from ows_text_campaigns.assets.services import AssetService from ows_text_campaigns.assets.types import UploadCredentials @dataclass(kw_only=True) class CreateArtistImageUploadCredentialsRequest(AuthRequest): global_participant_id: str filename: str @singleton class CreateArtistImageUploadCredentialsHandler: permission = Permission("text_campaign", "create") def __init__( self, asset_service: AssetService, artist_settings_service: ArtistSettingsService, artist_settings_validator: ArtistSettingsValidator, ) -> None: self.asset_service = asset_service self.artist_settings_service = artist_settings_service self.artist_settings_validator = artist_settings_validator def handle( self, request: CreateArtistImageUploadCredentialsRequest ) -> UploadCredentials: self.artist_settings_validator.validate_roster_access( identity_id=request.identity_id, global_participant_id=request.global_participant_id, permission=self.permission, ) _ = self.artist_settings_service.get_settings(request.global_participant_id) return self.asset_service.generate_upload_credentials( key=self.artist_settings_service.create_asset_key( request.global_participant_id, filename=request.filename ), )