Files
eggs-backend/core/apps/eggs/utils/notification.py
husanjon ab2dda61f9
Some checks failed
Build and Push to Docker Hub / build-test-push (push) Failing after 1m46s
restore composer.json, add mysqli extension
2026-04-15 13:45:56 +05:00

50 lines
1.9 KiB
Python

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 Exception as e:
logger.error(f"Failed to send notification: {e}")