From bd7eddb27537415fe0853a2e1a92985c3cc1ff87 Mon Sep 17 00:00:00 2001 From: abutalib-kiwi Date: Fri, 29 Sep 2023 14:58:06 +0530 Subject: [PATCH] notification mark as read api modified for clear all, list sorting set to updated at field, added same field --- .../migrations/0002_notification_updated_at.py | 18 ++++++++++++++++++ notifications/models.py | 1 + notifications/serializers.py | 2 +- notifications/views.py | 16 ++++++++++++---- 4 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 notifications/migrations/0002_notification_updated_at.py diff --git a/notifications/migrations/0002_notification_updated_at.py b/notifications/migrations/0002_notification_updated_at.py new file mode 100644 index 0000000..7a075fa --- /dev/null +++ b/notifications/migrations/0002_notification_updated_at.py @@ -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), + ), + ] diff --git a/notifications/models.py b/notifications/models.py index 5d6d02c..1fb99e9 100644 --- a/notifications/models.py +++ b/notifications/models.py @@ -18,6 +18,7 @@ class Notification(models.Model): data = models.JSONField(default=dict, blank=True, null=True) is_read = models.BooleanField(default=False) created_at = models.DateTimeField(default=timezone.now) + updated_at = models.DateTimeField(auto_now=True) def __str__(self): """ string representation """ diff --git a/notifications/serializers.py b/notifications/serializers.py index 8635970..2c7dfec 100644 --- a/notifications/serializers.py +++ b/notifications/serializers.py @@ -36,7 +36,7 @@ class NotificationListSerializer(serializers.ModelSerializer): class Meta(object): """meta info""" model = Notification - fields = ['id', 'notification_type', 'data', 'badge', 'is_read', 'created_at'] + fields = ['id', 'notification_type', 'data', 'badge', 'is_read', 'updated_at'] @staticmethod def get_badge(obj): diff --git a/notifications/views.py b/notifications/views.py index 31fb9c1..5fcafe8 100644 --- a/notifications/views.py +++ b/notifications/views.py @@ -33,7 +33,7 @@ class NotificationViewSet(viewsets.GenericViewSet): :return: """ 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() paginated_queryset = paginator.paginate_queryset(queryset, request) 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) 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"]) @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 """ - if request.query_params.get('all'): - Notification.objects.filter(notification_to_id=request.auth.payload['user_id']).update(is_read=True) - elif request.data.get('id'): + + if request.data.get('id'): 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)