Skip to content

Commit a9fa34a

Browse files
authored
Merge pull request #21 from DevOps-Cloud-Team5/SCRUM-40-attendence
update get schedule to per year and week
2 parents c31dc1b + 7bfc4e9 commit a9fa34a

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

api/models.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,10 @@ def get_teachers(self):
7474
return [uc.user for uc in UserCourse.objects.filter(user__role=AccountRoles.TEACHER)]
7575

7676
def get_lectures(self):
77-
return [lecture for lecture in CourseLecture.objects.filter(course=self)]
77+
return CourseLecture.objects.filter(course=self)
78+
79+
def get_lectures_week(self, year : int, week : int):
80+
return CourseLecture.objects.filter(course=self, start_time__year=year, start_time__week=week)
7881

7982
def is_user_enrolled(self, user : User):
8083
return bool(UserCourse.objects.filter(user=user, course=self))

api/urls.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@
7878
path('lecture/<pk>/student_att', SetStudentAttView.as_view(), name='lecture_att_student'),
7979
path('lecture/<pk>/teacher_att', SetTeacherAttView.as_view(), name='lecture_att_teacher'),
8080

81-
path('schedule/get', GetScheduleView.as_view(), name='schedule_get'),
81+
path('schedule/get/<year>/<week>', GetScheduleView.as_view(), name='schedule_get'),
8282

8383
# Documentation
8484
path('schema/', SpectacularAPIView.as_view(), name='schema'),

api/views.py

+12-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
import os
3+
from typing import List
34
from django.http import JsonResponse
45
from django.contrib.auth import get_user_model
56

@@ -344,19 +345,26 @@ def post(self, request, *args, **kwargs):
344345

345346
return Response({"ok": f"succesfully set attendence for {len(usernames)} students"}, status=status.HTTP_200_OK)
346347

348+
347349
class GetScheduleView(generics.GenericAPIView):
348350
authentication_classes = [JWTAuthentication]
349351
permission_classes = [IsStudent]
350352

351-
def get(self, request, *args, **kwargs):
353+
def get(self, request, year, week):
354+
if not year.isdigit() or int(year) < 1970:
355+
return Response({"error": f"invalid year parameter"}, status=status.HTTP_400_BAD_REQUEST)
356+
if not week.isdigit() or int(week) < 0 or int(week) > 52:
357+
return Response({"error": f"invalid week parameter"}, status=status.HTTP_400_BAD_REQUEST)
358+
352359
user = User.objects.all().filter(username=request.user.username)[0]
353-
courses = user.get_enrolled_courses()
360+
courses : List[Course] = user.get_enrolled_courses()
354361
all_lectures = []
355-
for course in courses:
356-
lectures_obj = course.get_lectures()
362+
for course in courses:
363+
lectures_obj = course.get_lectures_week(int(year), int(week))
357364
lectures = LectureSerializer(lectures_obj, many=True)
358365
for i, lecture_obj in enumerate(lectures_obj):
359366
att = lecture_obj.get_attendence_user(user)
367+
lectures.data[i]["course"] = lecture_obj.course.course_name
360368
lectures.data[i]["attended_student"] = att.attended_student if att is not None else False
361369
lectures.data[i]["attended_teacher"] = att.attended_teacher if att is not None else False
362370
all_lectures += lectures.data

0 commit comments

Comments
 (0)