schon/vibes_auth/signals.py
Egor fureunoir Gorbunov 5a7f3d4883 Features: 1) Add transaction hook to ensure send_verification_email_task runs after database commit.
Fixes: 1) Add missing import for `transaction` in `signals.py`; 2) Fix incorrect handling of `pre_save` skip logic for non-existent users; 3) Correct conditional logic for email change handling to avoid unnecessary activation resets.

Extra: 1) Simplify mutation attribute validation in `mutations.py` by excluding specific fields earlier in the loop; 2) Improve code readability with minor refactors in both `signals.py` and `mutations.py`.
2025-05-20 15:04:55 +03:00

31 lines
831 B
Python

from django.db import transaction
from django.db.models.signals import post_save, pre_save
from django.dispatch import receiver
from vibes_auth.models import User
from vibes_auth.utils.emailing import send_verification_email_task
@receiver(post_save, sender=User)
def send_verification_email_signal(instance, created, **kwargs):
if not created:
return
send_verification_email_task.delay(instance.pk)
@receiver(pre_save, sender=User)
def send_user_verification_email(instance, **kwargs):
if not instance.pk:
return
try:
old = User.objects.get(pk=instance.pk)
except User.DoesNotExist:
return
if old.email != instance.email:
instance.is_active = False
transaction.on_commit(
lambda: send_verification_email_task.delay(instance.pk)
)