From 8adea9018eff495014f016f0fbea47f795b98127 Mon Sep 17 00:00:00 2001 From: mohsentaba Date: Sat, 11 Jul 2026 16:33:00 +0330 Subject: [PATCH] system notifications connected to admin panel --- apps/account/serializers/notification.py | 13 +++++++++++-- apps/account/urls.py | 1 + apps/account/views/notification.py | 19 +++++++++++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/apps/account/serializers/notification.py b/apps/account/serializers/notification.py index 87cd938..4145834 100644 --- a/apps/account/serializers/notification.py +++ b/apps/account/serializers/notification.py @@ -1,7 +1,7 @@ from rest_framework import serializers -from apps.account.models import Notification +from apps.account.models import Notification, NotificationTemplate from apps.account.models import User @@ -33,4 +33,13 @@ class AdminNotificationSerializer(serializers.ModelSerializer): class Meta: model = Notification - fields = ['id', 'title', 'message', 'is_read', 'service', 'created_at', 'updated_at', 'user_fullname', 'user_email', 'user_id'] \ No newline at end of file + fields = ['id', 'title', 'message', 'is_read', 'service', 'created_at', 'updated_at', 'user_fullname', 'user_email', 'user_id'] + + +class NotificationTemplateSerializer(serializers.ModelSerializer): + class Meta: + model = NotificationTemplate + fields = [ + 'id', 'notification_type', 'name', 'is_active', + 'title_ru', 'title_en', 'body_ru', 'body_en', 'placeholders_info' + ] \ No newline at end of file diff --git a/apps/account/urls.py b/apps/account/urls.py index a4fe4a1..aacc7cf 100644 --- a/apps/account/urls.py +++ b/apps/account/urls.py @@ -11,6 +11,7 @@ admin_router = SimpleRouter() admin_router.register(r'users', views.AdminUserViewSet, basename='admin-users') admin_router.register(r'directory-users', views.AdminUserDirectoryViewSet, basename='admin-directory-users') admin_router.register(r'notifications', views.AdminNotificationViewSet, basename='admin-notifications') +admin_router.register(r'notification-templates', views.AdminNotificationTemplateViewSet, basename='admin-notification-templates') # Hide admin viewsets from swagger for prefix, viewset, basename in admin_router.registry: diff --git a/apps/account/views/notification.py b/apps/account/views/notification.py index 4854e39..422ee61 100644 --- a/apps/account/views/notification.py +++ b/apps/account/views/notification.py @@ -4,8 +4,8 @@ from rest_framework.authentication import TokenAuthentication from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi from rest_framework.permissions import IsAuthenticated -from apps.account.serializers import NotificationSerializer, NotificationSendSerializer, AdminNotificationSerializer -from apps.account.models import Notification, User +from apps.account.serializers import NotificationSerializer, NotificationSendSerializer, AdminNotificationSerializer, NotificationTemplateSerializer +from apps.account.models import Notification, User, NotificationTemplate from apps.account.tasks import send_notification from utils.pagination import StandardResultsSetPagination from django.db.models import Q @@ -380,3 +380,18 @@ class TestNotificationAPIView(generics.GenericAPIView): 'results': results, 'fcm_token_registered': bool(user.fcm) }, status=status.HTTP_200_OK) + + +class AdminNotificationTemplateViewSet(ModelViewSet): + permission_classes = [IsSuperAdmin] + authentication_classes = [TokenAuthentication] + serializer_class = NotificationTemplateSerializer + queryset = NotificationTemplate.objects.all().order_by('id') + pagination_class = StandardResultsSetPagination + + # Disable create and destroy actions as templates are system-defined + def create(self, request, *args, **kwargs): + return Response({'error': 'Method not allowed.'}, status=status.HTTP_405_METHOD_NOT_ALLOWED) + + def destroy(self, request, *args, **kwargs): + return Response({'error': 'Method not allowed.'}, status=status.HTTP_405_METHOD_NOT_ALLOWED)