feat(notifications): add redis-backed sse notification streaming

This commit is contained in:
2026-04-25 11:27:46 +03:30
parent e7de587f59
commit 0ca3255270
14 changed files with 1146 additions and 1 deletions

View File

@@ -0,0 +1,61 @@
from rest_framework import serializers
class NotificationSerializer(serializers.Serializer):
id = serializers.CharField()
type = serializers.CharField()
title = serializers.CharField(allow_blank=True)
message = serializers.CharField(allow_blank=True)
level = serializers.ChoiceField(
choices=("info", "success", "warning", "error")
)
created_at = serializers.CharField()
is_seen = serializers.BooleanField()
delete_on_seen = serializers.BooleanField()
action_url = serializers.CharField(
required=False, allow_blank=True, allow_null=True
)
entity_type = serializers.CharField(
required=False, allow_blank=True, allow_null=True
)
entity_id = serializers.CharField(
required=False, allow_blank=True, allow_null=True
)
meta = serializers.JSONField(required=False)
class NotificationListResponseSerializer(serializers.Serializer):
count = serializers.IntegerField()
unread_count = serializers.IntegerField()
notifications = NotificationSerializer(many=True)
class NotificationSeenRequestSerializer(serializers.Serializer):
id = serializers.CharField()
class NotificationDeleteResponseSerializer(serializers.Serializer):
deleted = serializers.BooleanField()
notification_id = serializers.CharField(required=False)
unread_count = serializers.IntegerField(required=False)
class NotificationSeenResponseSerializer(serializers.Serializer):
marked_read = serializers.BooleanField()
notification_id = serializers.CharField(required=False)
deleted = serializers.BooleanField(required=False)
unread_count = serializers.IntegerField(required=False)
notification = NotificationSerializer(required=False, allow_null=True)
class NotificationMarkAllReadResponseSerializer(serializers.Serializer):
marked_read = serializers.IntegerField()
class NotificationTypeFilterSerializer(serializers.Serializer):
type = serializers.CharField(required=False, allow_blank=True, allow_null=True)
class NotificationStreamTokenResponseSerializer(serializers.Serializer):
token = serializers.CharField()
expires_in = serializers.IntegerField()