gold eggs backend
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m55s
This commit is contained in:
49
core/apps/eggs/utils/notification.py
Normal file
49
core/apps/eggs/utils/notification.py
Normal file
@@ -0,0 +1,49 @@
|
||||
import logging
|
||||
|
||||
from django.db.models.signals import post_save
|
||||
from django.dispatch import receiver
|
||||
from firebase_admin import messaging, exceptions
|
||||
|
||||
from core.apps.eggs.models.notification import Notification
|
||||
from core.http.models import User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@receiver(post_save, sender=Notification)
|
||||
def send_notification(sender, instance, created, **kwargs): # noqa
|
||||
if created:
|
||||
try:
|
||||
if instance.user:
|
||||
# Sending notification to a specific user
|
||||
fcm_token = instance.user.fcm_token
|
||||
if fcm_token:
|
||||
message = messaging.Message(
|
||||
notification=messaging.Notification(
|
||||
title=instance.title,
|
||||
body=instance.body,
|
||||
),
|
||||
token=fcm_token,
|
||||
)
|
||||
messaging.send(message)
|
||||
logger.info(f"Notification sent to user {instance.user.id}")
|
||||
else:
|
||||
# Sending notification to all users
|
||||
users = User.objects.exclude(fcm_token__isnull=True).exclude(fcm_token='')
|
||||
if users.exists():
|
||||
messages = [
|
||||
messaging.Message(
|
||||
notification=messaging.Notification(
|
||||
title=instance.title,
|
||||
body=instance.body,
|
||||
),
|
||||
token=user.fcm_token,
|
||||
)
|
||||
for user in users
|
||||
]
|
||||
response = messaging.send_all(messages)
|
||||
logger.info(f"{response.success_count} notifications sent successfully")
|
||||
else:
|
||||
logger.warning("No users with valid FCM tokens found")
|
||||
except exceptions.FirebaseError as e:
|
||||
logger.error(f"Failed to send notification: {e}")
|
||||
Reference in New Issue
Block a user