2025-05-29 17:21:16 +08:00
|
|
|
# # apps/common/services/notification_service.py
|
|
|
|
# import logging
|
|
|
|
# from asgiref.sync import async_to_sync
|
|
|
|
# from channels.layers import get_channel_layer
|
|
|
|
# from apps.notification.models import Notification
|
|
|
|
|
|
|
|
# logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
# class NotificationService:
|
|
|
|
# def send_notification(self, user, title, content, notification_type, related_object_id, sender=None):
|
|
|
|
# """发送通知并通过WebSocket推送"""
|
|
|
|
# try:
|
|
|
|
# notification = Notification.objects.create(
|
|
|
|
# sender=sender,
|
|
|
|
# receiver=user,
|
|
|
|
# title=title,
|
|
|
|
# content=content,
|
|
|
|
# type=notification_type,
|
|
|
|
# related_resource=related_object_id,
|
|
|
|
# )
|
|
|
|
|
|
|
|
# # 准备发送到WebSocket的数据
|
|
|
|
# notification_data = {
|
|
|
|
# "id": str(notification.id),
|
|
|
|
# "title": notification.title,
|
|
|
|
# "content": notification.content,
|
|
|
|
# "type": notification.type,
|
|
|
|
# "created_at": notification.created_at.isoformat(),
|
|
|
|
# }
|
|
|
|
|
|
|
|
# # 只有当sender不为None时才添加sender信息
|
|
|
|
# if notification.sender:
|
|
|
|
# notification_data["sender"] = {
|
|
|
|
# "id": str(notification.sender.id),
|
|
|
|
# "name": notification.sender.name
|
|
|
|
# }
|
|
|
|
|
|
|
|
# channel_layer = get_channel_layer()
|
|
|
|
# async_to_sync(channel_layer.group_send)(
|
|
|
|
# f"notification_user_{user.id}",
|
|
|
|
# {
|
|
|
|
# "type": "notification",
|
|
|
|
# "data": notification_data
|
|
|
|
# }
|
|
|
|
# )
|
|
|
|
# return notification
|
|
|
|
# except Exception as e:
|
|
|
|
# logger.error(f"发送通知失败: {str(e)}")
|
|
|
|
# return None
|
|
|
|
|
|
|
|
|