From 8705be76745400df6cfe05fe8626df3ce1926a46 Mon Sep 17 00:00:00 2001
From: Manuel <manu041196@gmail.com>
Date: Sun, 14 Nov 2021 17:42:50 +0100
Subject: [PATCH] View to deal with voters within a Session

---
 wahlfang_api/serializers.py |  1 -
 wahlfang_api/urls.py        |  4 +++-
 wahlfang_api/views.py       | 16 +++++++++++++++-
 3 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/wahlfang_api/serializers.py b/wahlfang_api/serializers.py
index fb18556..dbc6603 100644
--- a/wahlfang_api/serializers.py
+++ b/wahlfang_api/serializers.py
@@ -147,4 +147,3 @@ class SpectatorSessionSerializer(serializers.ModelSerializer):
     class Meta:
         model = Session
         fields = ['title', 'meeting_link', 'elections']
-
diff --git a/wahlfang_api/urls.py b/wahlfang_api/urls.py
index 76cb857..1c0f33f 100644
--- a/wahlfang_api/urls.py
+++ b/wahlfang_api/urls.py
@@ -12,7 +12,8 @@ from wahlfang_api.views import (
     VoterInfoView,
     SpectatorView,
     ManagerSessionView,
-    ManagerElectionView
+    ManagerElectionView,
+    ManagerSessionVoterView
 )
 
 app_name = 'rest_api'
@@ -30,5 +31,6 @@ urlpatterns = [
     path('auth/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
     path('manager/add-session', ManagerSessionView.as_view(), name='add_session'),
     path('manager/election', ManagerElectionView.as_view(), name='manage_elections'),
+    path('manager/session/<int:pk>/voters', ManagerSessionVoterView.as_view(), name='manage_voters'),
     path('drf/', include('rest_framework.urls', namespace='rest_framework'))
 ]
diff --git a/wahlfang_api/views.py b/wahlfang_api/views.py
index a8184c0..e9bcc4f 100644
--- a/wahlfang_api/views.py
+++ b/wahlfang_api/views.py
@@ -58,8 +58,8 @@ class SpectatorView(generics.RetrieveAPIView):
     def get_object(self):
         return self.queryset.get(spectator_token=self.kwargs['uuid'])
 
-## Management Sessions ##
 
+# Management Sessions #
 
 class ManagerSessionView(generics.ListCreateAPIView, generics.DestroyAPIView):
     authentication_classes = [ElectionManagerJWTAuthentication]
@@ -67,6 +67,7 @@ class ManagerSessionView(generics.ListCreateAPIView, generics.DestroyAPIView):
     serializer_class = SessionSerializer
 
     def get_object(self):
+        # TODO: Replace query parameter with correct REST guideline /:pk
         session = get_object_or_404(Session, pk=self.request.query_params.get('pk'))
         return session
 
@@ -106,6 +107,19 @@ class ManagerElectionView(generics.ListCreateAPIView, generics.DestroyAPIView):
         return Response(status=status.HTTP_204_NO_CONTENT)
 
 
+class ManagerSessionVoterView(generics.ListCreateAPIView, generics.DestroyAPIView):
+    """
+    Deals with Voters within a session
+    """
+    authentication_classes = [ElectionManagerJWTAuthentication]
+    permission_classes = [IsElectionManager]
+    serializer_class = VoterDetailSerializer
+
+    def get_queryset(self):
+        session = get_object_or_404(Session, pk=self.kwargs['pk'])
+        return session.participants
+
+
 class ElectionViewset(viewsets.ReadOnlyModelViewSet):
     authentication_classes = [VoterJWTAuthentication]
     queryset = Election.objects.all()
-- 
GitLab