from django.db.models.signals import post_save from django.dispatch import receiver from payments.gateways import AbstractGateway from payments.models import Balance, Transaction from payments.utils.emailing import balance_deposit_email from vibes_auth.models import User @receiver(post_save, sender=User) def create_balance_on_user_creation_signal(instance, created, **_kwargs): if created: Balance.objects.create(user=instance) @receiver(post_save, sender=Transaction) def process_transaction_changes(instance, created, **_kwargs): if created: try: match instance.process.get("gateway", "default"): case "gateway": gateway = AbstractGateway() case "default": gateway = AbstractGateway() case _: gateway = AbstractGateway() gateway.process_transaction(instance) except Exception as e: instance.process = {"status": "ERRORED", "error": str(e)} if not created: status = str(instance.process.get("status", "")).lower() success = instance.process.get("success", False) if ("success" in status or success) and (instance.process.get("notify", False)): balance_deposit_email.delay(instance.uuid)