Skip to content

Commit 49e60c2

Browse files
authored
Merge pull request #29 from DevOps-Cloud-Team5/SCRUM-17-add-backend-attendence-view
Scrum 17 add backend attendence view
2 parents 38170f9 + 0a2e547 commit 49e60c2

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

api/urls.py

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
DisenrollCourseView,
2424
GetCourseLecturesView,
2525
GetFullCoursePage,
26+
GetFullLectureView,
2627
GetLectureView,
2728
GetScheduleView,
2829
MassEnrollCourseView,
@@ -91,6 +92,7 @@
9192
# path('course/lecture/<pk>/update', GetCourseByName.as_view(), name='lecture_add'), # TODO
9293

9394
path('lecture/<pk>/get', GetLectureView.as_view(), name='lecture_get'),
95+
path('lecture/<pk>/get_teacher_att', GetFullLectureView.as_view(), name='lecture_get_teacher_att'),
9496
path('lecture/<pk>/student_set_att', SetStudentAttView.as_view(), name='lecture_set_att_student'),
9597
path('lecture/<pk>/student_unset_att', UnsetStudentAttView.as_view(), name='lecture_unset_att_student'),
9698
path('lecture/<pk>/teacher_att', SetTeacherAttView.as_view(), name='lecture_att_teacher'),

api/views.py

+36-2
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from drf_spectacular.utils import extend_schema, OpenApiResponse
1616

1717
from .permissions import IsTeacher, IsAdmin, IsStudent
18-
from .models import Course, AccountRoles, CourseLecture
18+
from .models import AttendenceAcknowledgement, Course, AccountRoles, CourseLecture
1919

2020
from .serializers import AddLectureSerializer, CourseUserSerializer, CustomTokenSerializer, CreateUserSerializer, LectureSerializer, MailTestSerializer, MassEnrollSerializer, SetAttendenceTeacherSerializer, UserSerializer, CourseCreateSerializer, CourseSerializer
2121

@@ -441,10 +441,44 @@ class GetLectureView(generics.RetrieveAPIView):
441441
def get(self, _, pk):
442442
queryset = self.get_queryset().filter(pk=pk)
443443
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)
445445
serializer = self.serializer_class(queryset[0])
446446
return Response(serializer.data, status=status.HTTP_200_OK)
447447

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+
448482
def setAttendence(self, request, attended):
449483
if request.user.role != AccountRoles.STUDENT:
450484
return Response({"error": f"cannot set the attendence of a non-student"}, status=status.HTTP_200_OK)

0 commit comments

Comments
 (0)