diff --git a/InvenTree/common/api.py b/InvenTree/common/api.py index 2f7f3e2ca8..3132f6a16d 100644 --- a/InvenTree/common/api.py +++ b/InvenTree/common/api.py @@ -24,6 +24,8 @@ from django_q.tasks import async_task import common.models import common.serializers from InvenTree.helpers import inheritors +from plugin.models import NotificationUserSetting +from plugin.serializers import NotificationUserSettingSerializer class CsrfExemptMixin(object): @@ -219,6 +221,44 @@ class UserSettingsDetail(generics.RetrieveUpdateAPIView): ] +class NotificationUserSettingsList(SettingsList): + """ + API endpoint for accessing a list of notification user settings objects + """ + + queryset = NotificationUserSetting.objects.all() + serializer_class = NotificationUserSettingSerializer + + def filter_queryset(self, queryset): + """ + Only list settings which apply to the current user + """ + + try: + user = self.request.user + except AttributeError: + return NotificationUserSetting.objects.none() + + queryset = super().filter_queryset(queryset) + queryset = queryset.filter(user=user) + return queryset + + +class NotificationUserSettingsDetail(generics.RetrieveUpdateAPIView): + """ + Detail view for an individual "notification user setting" object + + - User can only view / edit settings their own settings objects + """ + + queryset = NotificationUserSetting.objects.all() + serializer_class = NotificationUserSettingSerializer + + permission_classes = [ + UserSettingsPermissions, + ] + + class NotificationList(generics.ListAPIView): queryset = common.models.NotificationMessage.objects.all() serializer_class = common.serializers.NotificationMessageSerializer @@ -344,6 +384,15 @@ settings_api_urls = [ re_path(r'^.*$', UserSettingsList.as_view(), name='api-user-setting-list'), ])), + # Notification settings + re_path(r'^notification/', include([ + # Notification Settings Detail + re_path(r'^(?P\d+)/', NotificationUserSettingsDetail.as_view(), name='api-notification-setting-detail'), + + # Notification Settings List + re_path(r'^.*$', NotificationUserSettingsList.as_view(), name='api-notifcation-setting-list'), + ])), + # Global settings re_path(r'^global/', include([ # Global Settings Detail diff --git a/InvenTree/plugin/serializers.py b/InvenTree/plugin/serializers.py index 6a7cfcf0c9..276604b390 100644 --- a/InvenTree/plugin/serializers.py +++ b/InvenTree/plugin/serializers.py @@ -15,7 +15,7 @@ from django.utils import timezone from rest_framework import serializers -from plugin.models import PluginConfig, PluginSetting +from plugin.models import PluginConfig, PluginSetting, NotificationUserSetting from common.serializers import GenericReferencedSettingSerializer @@ -139,3 +139,14 @@ class PluginSettingSerializer(GenericReferencedSettingSerializer): ] plugin = serializers.PrimaryKeyRelatedField(read_only=True) + + +class NotificationUserSettingSerializer(GenericReferencedSettingSerializer): + """ + Serializer for the PluginSetting model + """ + + MODEL = NotificationUserSetting + EXTRA_FIELDS = ['method', ] + + method = serializers.CharField(read_only=True)