notification mark as read api modified for clear all, list sorting set to updated at field, added same field

This commit is contained in:
abutalib-kiwi
2023-09-29 14:58:06 +05:30
parent e121c92fb4
commit bd7eddb275
4 changed files with 32 additions and 5 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 4.2.2 on 2023-09-29 07:00
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('notifications', '0001_initial'),
]
operations = [
migrations.AddField(
model_name='notification',
name='updated_at',
field=models.DateTimeField(auto_now=True),
),
]

View File

@ -18,6 +18,7 @@ class Notification(models.Model):
data = models.JSONField(default=dict, blank=True, null=True) data = models.JSONField(default=dict, blank=True, null=True)
is_read = models.BooleanField(default=False) is_read = models.BooleanField(default=False)
created_at = models.DateTimeField(default=timezone.now) created_at = models.DateTimeField(default=timezone.now)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self): def __str__(self):
""" string representation """ """ string representation """

View File

@ -36,7 +36,7 @@ class NotificationListSerializer(serializers.ModelSerializer):
class Meta(object): class Meta(object):
"""meta info""" """meta info"""
model = Notification model = Notification
fields = ['id', 'notification_type', 'data', 'badge', 'is_read', 'created_at'] fields = ['id', 'notification_type', 'data', 'badge', 'is_read', 'updated_at']
@staticmethod @staticmethod
def get_badge(obj): def get_badge(obj):

View File

@ -33,7 +33,7 @@ class NotificationViewSet(viewsets.GenericViewSet):
:return: :return:
""" """
queryset = Notification.objects.filter(notification_to_id=request.auth.payload['user_id'] queryset = Notification.objects.filter(notification_to_id=request.auth.payload['user_id']
).select_related('notification_to').order_by('-id') ).select_related('notification_to').order_by('-updated_at', '-id')
paginator = CustomPageNumberPagination() paginator = CustomPageNumberPagination()
paginated_queryset = paginator.paginate_queryset(queryset, request) paginated_queryset = paginator.paginate_queryset(queryset, request)
serializer = self.serializer_class(paginated_queryset, many=True) serializer = self.serializer_class(paginated_queryset, many=True)
@ -61,6 +61,8 @@ class NotificationViewSet(viewsets.GenericViewSet):
notification_type = request.query_params.get('type', TEST_NOTIFICATION) notification_type = request.query_params.get('type', TEST_NOTIFICATION)
send_notification(int(notification_type), None, None, request.auth.payload['user_id'], send_notification(int(notification_type), None, None, request.auth.payload['user_id'],
{}) {})
if notification_type and request.query_params.get('clear_all'):
Notification.objects.filter(notification_type=notification_type).delete()
return custom_response(SUCCESS_CODE["3000"]) return custom_response(SUCCESS_CODE["3000"])
@action(methods=['patch'], url_path='mark-as-read', url_name='mark-as-read', detail=False, @action(methods=['patch'], url_path='mark-as-read', url_name='mark-as-read', detail=False,
@ -69,8 +71,14 @@ class NotificationViewSet(viewsets.GenericViewSet):
""" """
notification list notification list
""" """
if request.query_params.get('all'):
Notification.objects.filter(notification_to_id=request.auth.payload['user_id']).update(is_read=True) if request.data.get('id'):
elif request.data.get('id'):
Notification.objects.filter(id__in=request.data.get('id')).update(is_read=True) Notification.objects.filter(id__in=request.data.get('id')).update(is_read=True)
elif request.query_params.get('mark_all'):
Notification.objects.filter(notification_to_id=request.auth.payload['user_id']).update(is_read=True)
elif request.query_params.get('clear_all'):
Notification.objects.filter(notification_to_id=request.auth.payload['user_id']).delete()
return custom_response(SUCCESS_CODE['3039'], response_status=status.HTTP_200_OK) return custom_response(SUCCESS_CODE['3039'], response_status=status.HTTP_200_OK)