from dataclasses import dataclass from anydi import singleton from fansifter_common.auth.account import Account from fansifter_common.auth.requests import AuthRequest from fansifter_common.auth.services import AuthService from fansifter_common.auth.types import Permission from email_campaigns.automated.repositories import AutomatedEmailRepository from email_campaigns.emails.exceptions import EmailNotFoundError @dataclass(kw_only=True) class GetAutomatedEmailStatusRequest(AuthRequest): email_id: str @dataclass class AutomatedEmailStatusResponse: has_unapplied_changes: bool is_automated: bool @singleton class GetAutomatedEmailStatusHandler: permission = Permission("email_campaign", "view") def __init__( self, auth_service: AuthService, automated_email_repository: AutomatedEmailRepository, ) -> None: self.auth_service = auth_service self.automated_email_repository = automated_email_repository def handle( self, request: GetAutomatedEmailStatusRequest ) -> AutomatedEmailStatusResponse: status = self.automated_email_repository.get_status(request.email_id) if status is None: raise EmailNotFoundError self.auth_service.authorize_account( request.identity_id, account=Account( vendor_id=status.vendor_id, subaccount_id=status.subaccount_id, ), permission=self.permission, ) return AutomatedEmailStatusResponse( has_unapplied_changes=status.has_unapplied_changes, is_automated=status.is_automated, )