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 fansifter_common.utils import timezone from email_campaigns.automated.exceptions import AutomatedEmailHasTriggerError from email_campaigns.automated.repositories import AutomatedEmailRepository from email_campaigns.emails.exceptions import EmailNotFoundError @dataclass(kw_only=True) class DeleteAutomatedEmailRequest(AuthRequest): email_id: str @singleton class DeleteAutomatedEmailHandler: permission = Permission("email_campaign", "delete") 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: DeleteAutomatedEmailRequest) -> None: automated_email = self.automated_email_repository.get(request.email_id) if automated_email is None: raise EmailNotFoundError if automated_email.is_automated: raise AutomatedEmailHasTriggerError self.auth_service.authorize_account( request.identity_id, account=automated_email.account, permission=self.permission, ) automated_email.deleted_at = timezone.now() automated_email.deleted_by = request.identity_id self.automated_email_repository.save(automated_email) return None