diff --git a/wahlfang_api/serializers.py b/wahlfang_api/serializers.py index fb18556341e367c1ae020967dc7d21ad36fa0cb2..dbc66039a91c04e19b5e332bba68a64b7ed49f70 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 76cb857c8c0335d3d5f031f4f23a1988d59b7357..1c0f33fc08df2369e62526569de8c9c02482b588 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 a8184c04ad23dbc9abe78c0174aca092eff8dc89..e9bcc4f3bb08a28ee40084c40e8051e032455519 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()