from dataclasses import dataclass from anydi import singleton from ows_text_campaigns.artist.exceptions import ArtistSettingsNotFoundError from ows_text_campaigns.artist.services import ArtistSettingsService from ows_text_campaigns.config import Settings @dataclass(kw_only=True) class GetArtistSettingsByPhoneNumberRequest: phone_number: str @dataclass(kw_only=True, frozen=True) class GetArtistSettingsByPhoneNumberResponse: artist_name: str global_participant_id: str opt_in_message: str opt_in_message_terms: str reopt_in_message: str welcome_message: str welcome_message_instructions: str info_message: str vcard_url: str | None @singleton class GetArtistSettingsByPhoneNumberHandler: def __init__( self, artist_settings_service: ArtistSettingsService, settings: Settings ) -> None: self.artist_settings_service = artist_settings_service self.settings = settings def handler( self, request: GetArtistSettingsByPhoneNumberRequest ) -> GetArtistSettingsByPhoneNumberResponse: artist_settings = self.artist_settings_service.get_settings_by_phone_number( phone_number=request.phone_number ) artist_phone_number = next( ( n for n in artist_settings.phone_numbers if n.phone_number == request.phone_number ), None, ) if not artist_phone_number: raise ArtistSettingsNotFoundError return GetArtistSettingsByPhoneNumberResponse( artist_name=artist_settings.artist_name, global_participant_id=artist_settings.global_participant_id, opt_in_message=artist_settings.opt_in_message, opt_in_message_terms=self.settings.artist_opt_in_message_terms, reopt_in_message=self.settings.artist_reopt_in_message, welcome_message=artist_settings.welcome_message, welcome_message_instructions=self.settings.artist_welcome_message_instructions, info_message=self.settings.artist_info_message, vcard_url=artist_phone_number.vcard_url, )