diff --git a/opentech/apply/funds/api_views.py b/opentech/apply/funds/api_views.py index bc7932bd5c675e17e5fe4c368af6a2d529ba7a15..d86e3def3aff50522d72d11b30d387f556746d22 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 777459040a0e49360a60f4d98bb80928889f295f..cde0af1feaa6abf064fe6031a53a99f89eba088e 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 3c1b8919fd869d6cfa594490d8f8c8b1bbcadaa9..76e6630792b6b8b53cc7363332cc08f735be285a 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'),