|
15 | 15 | from drf_spectacular.utils import extend_schema, OpenApiResponse
|
16 | 16 |
|
17 | 17 | from .permissions import IsTeacher, IsAdmin, IsStudent
|
18 |
| -from .models import Course, AccountRoles, CourseLecture |
| 18 | +from .models import AttendenceAcknowledgement, Course, AccountRoles, CourseLecture |
19 | 19 |
|
20 | 20 | from .serializers import AddLectureSerializer, CourseUserSerializer, CustomTokenSerializer, CreateUserSerializer, LectureSerializer, MailTestSerializer, MassEnrollSerializer, SetAttendenceTeacherSerializer, UserSerializer, CourseCreateSerializer, CourseSerializer
|
21 | 21 |
|
@@ -441,10 +441,44 @@ class GetLectureView(generics.RetrieveAPIView):
|
441 | 441 | def get(self, _, pk):
|
442 | 442 | queryset = self.get_queryset().filter(pk=pk)
|
443 | 443 | if not queryset:
|
444 |
| - return Response({"error": f"course id '{pk}' not found"}, status=status.HTTP_404_NOT_FOUND) |
| 444 | + return Response({"error": f"lecture id '{pk}' not found"}, status=status.HTTP_404_NOT_FOUND) |
445 | 445 | serializer = self.serializer_class(queryset[0])
|
446 | 446 | return Response(serializer.data, status=status.HTTP_200_OK)
|
447 | 447 |
|
| 448 | +class GetFullLectureView(generics.RetrieveAPIView): |
| 449 | + authentication_classes = [JWTAuthentication] |
| 450 | + permission_classes = [IsTeacher] |
| 451 | + |
| 452 | + queryset = CourseLecture.objects.all() |
| 453 | + serializer_class = LectureSerializer |
| 454 | + |
| 455 | + def get(self, _, pk): |
| 456 | + queryset = self.get_queryset().filter(pk=pk) |
| 457 | + if not queryset: |
| 458 | + return Response({"error": f"lecture id '{pk}' not found"}, status=status.HTTP_404_NOT_FOUND) |
| 459 | + |
| 460 | + lecture : CourseLecture = queryset[0] |
| 461 | + course : Course = lecture.course |
| 462 | + |
| 463 | + serializer = self.serializer_class(lecture) |
| 464 | + response = dict(serializer.data) |
| 465 | + response["course_name"] = course.course_name |
| 466 | + response["students"] = [] |
| 467 | + |
| 468 | + students = course.get_enrolled_students() |
| 469 | + for student in students: |
| 470 | + att : AttendenceAcknowledgement = lecture.get_attendence_user(student) |
| 471 | + attended = att.attended_teacher if att is not None else None |
| 472 | + data = { |
| 473 | + "first_name": student.first_name, |
| 474 | + "last_name": student.last_name, |
| 475 | + "username": student.username, |
| 476 | + "attended": attended |
| 477 | + } |
| 478 | + response["students"].append(data) |
| 479 | + |
| 480 | + return Response(response, status=status.HTTP_200_OK) |
| 481 | + |
448 | 482 | def setAttendence(self, request, attended):
|
449 | 483 | if request.user.role != AccountRoles.STUDENT:
|
450 | 484 | return Response({"error": f"cannot set the attendence of a non-student"}, status=status.HTTP_200_OK)
|
|
0 commit comments