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.dtos import ArtistSettings from ows_text_campaigns.artist.services import ArtistSettingsService from ows_text_campaigns.artist.validators import ArtistSettingsValidator from ows_text_campaigns.config import Settings @dataclass(kw_only=True) class GetArtistSettingsRequest(AuthRequest): global_participant_id: str @singleton class GetArtistSettingsHandler: permission = Permission("text_campaign", "view") def __init__( self, artist_settings_service: ArtistSettingsService, artist_settings_validator: ArtistSettingsValidator, settings: Settings, ) -> None: self.artist_settings_service = artist_settings_service self.artist_settings_validator = artist_settings_validator self.settings = settings def handler(self, request: GetArtistSettingsRequest) -> ArtistSettings: self.artist_settings_validator.validate_roster_access( identity_id=request.identity_id, global_participant_id=request.global_participant_id, permission=self.permission, ) artist_settings = self.artist_settings_service.get_settings( global_participant_id=request.global_participant_id ) return ArtistSettings( welcome_message=artist_settings.welcome_message, welcome_message_instructions=self.settings.artist_welcome_message_instructions, opt_in_message=artist_settings.opt_in_message, opt_in_message_terms=self.settings.artist_opt_in_message_terms, image_url=artist_settings.image_url, phone_numbers=[ { "phone_number": phone_number.phone_number, "country_code": phone_number.country_code, } for phone_number in artist_settings.phone_numbers ], welcome_message_scan_result=artist_settings.welcome_message_scan_result, opt_in_message_scan_result=artist_settings.opt_in_message_scan_result, )