From 6ef85df00f441744d1a59624c5b1545a7717caef Mon Sep 17 00:00:00 2001 From: Hironsan Date: Thu, 27 Jul 2023 11:33:21 +0900 Subject: [PATCH] Add reset assignment endpoint --- backend/examples/urls.py | 3 ++- backend/examples/views/assignment.py | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/backend/examples/urls.py b/backend/examples/urls.py index bce25515..82f4b398 100644 --- a/backend/examples/urls.py +++ b/backend/examples/urls.py @@ -1,6 +1,6 @@ from django.urls import path -from .views.assignment import AssignmentDetail, AssignmentList +from .views.assignment import AssignmentDetail, AssignmentList, ResetAssignment from .views.comment import CommentDetail, CommentList from .views.example import ExampleDetail, ExampleList from .views.example_state import ExampleStateList @@ -8,6 +8,7 @@ from .views.example_state import ExampleStateList urlpatterns = [ path(route="assignments", view=AssignmentList.as_view(), name="assignment_list"), path(route="assignments/", view=AssignmentDetail.as_view(), name="assignment_detail"), + path(route="assignments/reset", view=ResetAssignment.as_view(), name="assignment_reset"), path(route="examples", view=ExampleList.as_view(), name="example_list"), path(route="examples/", view=ExampleDetail.as_view(), name="example_detail"), path(route="comments", view=CommentList.as_view(), name="comment_list"), diff --git a/backend/examples/views/assignment.py b/backend/examples/views/assignment.py index 51d58d1e..3f9767a9 100644 --- a/backend/examples/views/assignment.py +++ b/backend/examples/views/assignment.py @@ -1,7 +1,8 @@ from django.shortcuts import get_object_or_404 from django_filters.rest_framework import DjangoFilterBackend -from rest_framework import filters, generics +from rest_framework import filters, generics, status from rest_framework.permissions import IsAuthenticated +from rest_framework.views import APIView, Response from examples.models import Assignment from examples.serializers import AssignmentSerializer @@ -33,3 +34,15 @@ class AssignmentDetail(generics.RetrieveUpdateDestroyAPIView): serializer_class = AssignmentSerializer lookup_url_kwarg = "assignment_id" permission_classes = [IsAuthenticated & (IsProjectAdmin | IsProjectStaffAndReadOnly)] + + +class ResetAssignment(APIView): + permission_classes = [IsAuthenticated & IsProjectAdmin] + + @property + def project(self): + return get_object_or_404(Project, pk=self.kwargs["project_id"]) + + def delete(self, *args, **kwargs): + Assignment.objects.filter(project=self.project).delete() + return Response(status=status.HTTP_204_NO_CONTENT)