from dataclasses import dataclass from anydi import singleton from fansifter_common.identifiers.types import ProfileToken from preference_center.profile.cache import ProfileCache from preference_center.profile.dispatcher import ProfileDispatcher from preference_center.profile.services import ProfileService @dataclass class DeleteProfileRequest: token: ProfileToken @singleton class DeleteProfileHandler: def __init__( self, dispatcher: ProfileDispatcher, cache: ProfileCache, profile_service: ProfileService, ) -> None: self.dispatcher = dispatcher self.cache = cache self.profile_service = profile_service def handle(self, request: DeleteProfileRequest) -> None: identifier = self.profile_service.decode_profile_identifier(request.token) profile = self.profile_service.get_profile_by_identifier_cached(identifier) profile.deleted = True profile.updated_by = identifier.impersonated_by # Clear cached profile data self.cache.set_profile(identifier, profile) # Dispatch the deletion event outside the transaction self.dispatcher.dispatch_profile_deleted( profile, origin_id=identifier.origin_id, origin_type=identifier.origin_type, automated_email_trigger_id=identifier.automated_email_trigger_id, )