import logging 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.adapters.scanner import ContentRecommendations, ContentScanner from ows_text_campaigns.artist.services import ArtistSettingsService from ows_text_campaigns.campaigns.services import CampaignService logger = logging.getLogger(__name__) @dataclass class ScanCampaignContentRequest(AuthRequest): campaign_id: str content: str @singleton class ScanCampaignContentHandler: permission = Permission("text_campaign", "edit") def __init__( self, auth_service: AuthService, artist_settings_service: ArtistSettingsService, campaign_service: CampaignService, scanner: ContentScanner, ) -> None: self.auth_service = auth_service self.artist_settings_service = artist_settings_service self.campaign_service = campaign_service self.scanner = scanner def handle(self, request: ScanCampaignContentRequest) -> ContentRecommendations: campaign = self.campaign_service.get_campaign(request.campaign_id) self.auth_service.authorize_account( request.identity_id, account=campaign.account, permission=self.permission, ) artist_settings = self.artist_settings_service.get_configured_settings( campaign.global_participant_id ) return self.scanner.scan( content=request.content, artist_name=artist_settings.artist_name, )