import asyncio import logging from apps.account.models import Notification from apps.account.tasks import send_notification logger = logging.getLogger(__name__) def create_and_send_notification(user, title_en, body_en, title_fa, body_fa, service='imam-javad', data=None): """ Creates a Notification record in the database and sends a push notification to FCM. Resolves localized title and body based on user.language. """ lang = getattr(user, 'language', None) lang_code = lang.code if lang and hasattr(lang, 'code') else 'fa' title = title_fa if lang_code == 'fa' else title_en message = body_fa if lang_code == 'fa' else body_en # Save to database notif = Notification.objects.create( user=user, title=title, message=message, service=service ) fcm_token = getattr(user, 'fcm', None) if fcm_token: try: try: loop = asyncio.get_event_loop() except RuntimeError: loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) if loop.is_running(): loop.create_task(send_notification([fcm_token], title, message, data)) else: loop.run_until_complete(send_notification([fcm_token], title, message, data)) except Exception as e: logger.error(f"Failed to send push notification via FCM: {e}") return notif