From 850f3e17354135b1d365b848a546914d76668aae Mon Sep 17 00:00:00 2001 From: Todd Dembrey <todd.dembrey@torchbox.com> Date: Mon, 21 Jan 2019 01:50:08 +0000 Subject: [PATCH] Add the comment creation and listing on the submission --- opentech/apply/funds/api_views.py | 35 ++++++++++++++++++++++++++++- opentech/apply/funds/serializers.py | 8 +++++++ opentech/apply/funds/urls.py | 2 ++ 3 files changed, 44 insertions(+), 1 deletion(-) diff --git a/opentech/apply/funds/api_views.py b/opentech/apply/funds/api_views.py index bc7932bd5..d86e3def3 100644 --- a/opentech/apply/funds/api_views.py +++ b/opentech/apply/funds/api_views.py @@ -8,11 +8,14 @@ from django_filters import rest_framework as filters from wagtail.core.models import Page from opentech.api.pagination import StandardResultsSetPagination -from opentech.apply.activity.models import Activity +from opentech.apply.activity.models import Activity, COMMENT +from opentech.apply.activity.messaging import messenger, MESSAGES + from .models import ApplicationSubmission from .models.applications import SubmittableStreamForm from .serializers import ( CommentSerializer, + CommentCreateSerializer, RoundLabSerializer, SubmissionActionSerializer, SubmissionListSerializer, @@ -100,3 +103,33 @@ class CommentList(generics.ListAPIView): def get_queryset(self): return super().get_queryset().visible_to(self.request.user) + + +class CommentListCreate(generics.ListCreateAPIView): + queryset = Activity.comments.all() + serializer_class = CommentCreateSerializer + permission_classes = ( + permissions.IsAuthenticated, IsApplyStaffUser, + ) + filter_backends = (filters.DjangoFilterBackend,) + filter_fields = ('visibility',) + pagination_class = StandardResultsSetPagination + + def get_queryset(self): + return super().get_queryset().filter( + submission=self.kwargs['pk'] + ).visible_to(self.request.user) + + def perform_create(self, serializer): + obj = serializer.save( + type=COMMENT, + user=self.request.user, + submission_id=self.kwargs['pk'] + ) + messenger( + MESSAGES.COMMENT, + request=self.request, + user=self.request.user, + submission=obj.submission, + related=obj, + ) diff --git a/opentech/apply/funds/serializers.py b/opentech/apply/funds/serializers.py index 777459040..cde0af1fe 100644 --- a/opentech/apply/funds/serializers.py +++ b/opentech/apply/funds/serializers.py @@ -90,3 +90,11 @@ class CommentSerializer(serializers.ModelSerializer): class Meta: model = Activity fields = ('id', 'timestamp', 'user', 'submission', 'message', 'visibility') + + +class CommentCreateSerializer(serializers.ModelSerializer): + user = serializers.StringRelatedField() + + class Meta: + model = Activity + fields = ('id', 'timestamp', 'user', 'message', 'visibility') diff --git a/opentech/apply/funds/urls.py b/opentech/apply/funds/urls.py index 3c1b8919f..76e663079 100644 --- a/opentech/apply/funds/urls.py +++ b/opentech/apply/funds/urls.py @@ -12,6 +12,7 @@ from .views import ( ) from .api_views import ( CommentList, + CommentListCreate, RoundLabDetail, SubmissionAction, SubmissionList, @@ -46,6 +47,7 @@ api_urls = ([ path('', SubmissionList.as_view(), name='list'), path('<int:pk>/', SubmissionDetail.as_view(), name='detail'), path('<int:pk>/actions/', SubmissionAction.as_view(), name='actions'), + path('<int:pk>/comments/', CommentListCreate.as_view(), name='comments'), ], 'submissions'))), path('rounds/', include(([ path('<int:pk>/', RoundLabDetail.as_view(), name='detail'), -- GitLab