@@ -60,47 +60,57 @@ def get_user_info(request, **kwargs):
6060 methods = ["GET" ],
6161 tags = ["For student" ],
6262 summary = "Get student training history" ,
63- description = "Retrieve student's training history for a specific semester, including regular trainings, self-sport activities, results of fitness test , and medical references." ,
63+ description = "Retrieve student's training history for a specific semester, including trainings, self-sport activities, results of fitness tests , and medical references." ,
6464 responses = {
65- status .HTTP_200_OK : StudentSpecificSemesterHistorySerializer ,
65+ status .HTTP_200_OK : SemesterHistoryWithFitnessSerializer ,
6666 status .HTTP_404_NOT_FOUND : training_history404 ,
6767 },
6868)
6969@api_view (["GET" ])
7070@permission_classes ([IsStudent ])
7171def get_student_specific_semester_history (request , semester_id : int , ** kwargs ):
7272 """
73- Get student's trainings per_semester + fitness tests
73+ Get student's training history for a specific semester using unified logic.
7474 """
75- semester = get_object_or_404 (Semester , pk = semester_id )
7675 student : Student = request .user .student
76+ semester = get_object_or_404 (Semester , pk = semester_id )
7777
78+ trainings_queryset = get_detailed_hours_and_self (student , semester )
7879 trainings = []
79- for g in get_detailed_hours_and_self (student , semester ):
80- trainings .append (
81- {
82- ** g ,
83- "group" : g ["group" ]
84- if g .get ("group_id" , - 1 ) < 0
85- else Group .objects .get (pk = g ["group_id" ]).to_frontend_name (),
86- "timestamp" : timezone .localtime (g ["timestamp" ]),
87- }
88- )
80+ for t in get_detailed_hours_and_self (student , semester ):
81+ trainings .append ({
82+ "training_id" : t .get ("id" , - 1 ),
83+ "date" : t ["timestamp" ].strftime ("%Y-%m-%d" ),
84+ "time" : t ["timestamp" ].strftime ("%H:%M" ),
85+ "hours" : t .get ("hours" , 0 ),
86+ "group_name" : t ["group" ] if t .get ("group_id" , - 1 ) < 0 else Group .objects .get (pk = t ["group_id" ]).to_frontend_name (),
87+ "sport_name" : t .get ("sport_name" , "Unknown" ),
88+ "training_class" : t .get ("training_class" , "" ),
89+ "custom_name" : t .get ("custom_name" , "" ),
90+ })
91+
8992
9093 fitness_tests = get_student_fitness_results_for_semester_crud (
9194 student = student ,
9295 semester = semester ,
9396 latest_only = False ,
9497 )
9598
96- payload = {
99+ semester_payload = {
97100 "semester_id" : semester .id ,
98101 "semester_name" : str (semester ),
102+ "semester_start" : semester .start ,
103+ "semester_end" : semester .end ,
104+ "required_hours" : semester .hours ,
105+ "total_hours" : sum (t ["hours" ] for t in trainings ),
99106 "trainings" : trainings ,
100107 "fitness_tests" : fitness_tests ,
101108 }
102109
103- return Response (StudentSpecificSemesterHistorySerializer (payload ).data )
110+ serializer = SemesterHistoryWithFitnessSerializer (semester_payload )
111+ return Response (serializer .data )
112+
113+
104114
105115
106116@extend_schema (
0 commit comments