17
17
from .permissions import IsTeacher , IsAdmin , IsStudent
18
18
from .models import Course , AccountRoles , CourseLecture
19
19
20
- from .serializers import AddLectureSerializer , CourseUserSerializer , CustomTokenSerializer , CreateUserSerializer , LectureSerializer , MassEnrollSerializer , SetAttendenceTeacherSerializer , UserSerializer , CourseCreateSerializer , CourseSerializer
20
+ from .serializers import AddLectureSerializer , CourseUserSerializer , CustomTokenSerializer , CreateUserSerializer , LectureSerializer , MailTestSerializer , MassEnrollSerializer , SetAttendenceTeacherSerializer , UserSerializer , CourseCreateSerializer , CourseSerializer
21
21
22
22
23
23
@@ -242,6 +242,7 @@ def get(self, request, pk):
242
242
if not queryset :
243
243
return Response ({"error" : f"course id '{ pk } ' not found" }, status = status .HTTP_404_NOT_FOUND )
244
244
245
+ user = User .objects .all ().filter (username = request .user .username )[0 ]
245
246
course : Course = queryset [0 ]
246
247
teachers = course .get_teachers ()
247
248
students = course .get_enrolled_students ()
@@ -251,11 +252,11 @@ def get(self, request, pk):
251
252
response_data ["course_name" ] = course .course_name
252
253
response_data ["num_teachers" ] = len (teachers )
253
254
response_data ["num_students" ] = len (students )
255
+ response_data ["enrolled" ] = course .is_user_enrolled (user = user )
254
256
response_data ["attended" ] = - 1
255
257
response_data ["missed" ] = - 1
256
258
response_data ["users" ] = CourseUserSerializer ((teachers + students ), many = True ).data
257
259
258
- user = User .objects .all ().filter (username = request .user .username )[0 ]
259
260
if user .role == AccountRoles .STUDENT :
260
261
response_data |= self .get_attendence_stats (course , user )
261
262
@@ -305,6 +306,29 @@ def post(self, request, *args, **kwargs):
305
306
306
307
return Response ({"ok" : f"succesfully enrolled { username } in { obj .course_name } " }, status = status .HTTP_200_OK )
307
308
309
+ class DisenrollCourseView (generics .GenericAPIView ):
310
+ authentication_classes = [JWTAuthentication ]
311
+ permission_classes = [IsStudent ]
312
+ lookup_field = 'pk'
313
+
314
+ queryset = Course .objects .all ()
315
+ serializer_class = CourseSerializer
316
+
317
+ def post (self , request , * args , ** kwargs ):
318
+ obj : Course = self .get_object ()
319
+ user = request .user
320
+ username = user .username
321
+
322
+ if not obj .is_user_enrolled (request .user ):
323
+ return Response ({"error" : f"{ username } is not enrolled in { obj .course_name } " }, status = status .HTTP_400_BAD_REQUEST )
324
+
325
+ obj .remove_user_from_course (user )
326
+
327
+ if getattr (obj , '_prefetched_objects_cache' , None ):
328
+ obj ._prefetched_objects_cache = {}
329
+
330
+ return Response ({"ok" : f"succesfully disenrolled { username } from { obj .course_name } " }, status = status .HTTP_200_OK )
331
+
308
332
class MassEnrollCourseView (generics .GenericAPIView ):
309
333
authentication_classes = [JWTAuthentication ]
310
334
permission_classes = [IsAdmin ]
0 commit comments