Skip to content

Commit 75fe26a

Browse files
committed
fix: return filter logic to frontend
1 parent 6d60ac9 commit 75fe26a

3 files changed

Lines changed: 36 additions & 62 deletions

File tree

HwProj.APIGateway/HwProj.APIGateway.API/Controllers/CoursesController.cs

Lines changed: 7 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using System.Collections.Generic;
22
using System.Linq;
3-
using System;
43
using System.Net;
54
using System.Threading.Tasks;
65
using AutoMapper;
@@ -270,64 +269,15 @@ public async Task<IActionResult> GetMentorWorkspace(long courseId, string mentor
270269
if (!mentorCourseView.Succeeded)
271270
return BadRequest(mentorCourseView.Errors[0]);
272271

273-
var courseResult = await _coursesClient.GetCourseDataRaw(courseId);
274-
if (!courseResult.Succeeded)
275-
return BadRequest(courseResult.Errors[0]);
272+
var studentIds = mentorCourseView.Value.CourseMates.Select(t => t.StudentId).ToArray();
273+
var students = await AuthServiceClient.GetAccountsData(studentIds);
276274

277-
var workspace = await CourseToMentorWorkspaceViewModel(courseResult.Value, mentorCourseView.Value);
278-
return Ok(workspace);
279-
}
280-
281-
private async Task<WorkspaceViewModel> CourseToMentorWorkspaceViewModel(CourseDTO course, CourseDTO mentorCourseView)
282-
{
283-
var courseGroups = (course.Groups ?? Array.Empty<GroupViewModel>())
284-
.Where(g => !string.IsNullOrWhiteSpace(g.Name))
285-
.ToArray();
286-
287-
var filteredGroups = (mentorCourseView.Groups ?? Array.Empty<GroupViewModel>())
288-
.Where(g => !string.IsNullOrWhiteSpace(g.Name))
289-
.ToArray();
290-
291-
var selectedGroups = filteredGroups.Length == courseGroups.Length
292-
? Array.Empty<GroupViewModel>()
293-
: filteredGroups;
294-
295-
var selectedGroupsStudentIds = selectedGroups
296-
.SelectMany(g => g.StudentsIds ?? Array.Empty<string>())
297-
.ToHashSet();
298-
299-
var selectedStudentIdsWithoutGroups = (mentorCourseView.CourseMates ?? Array.Empty<CourseMateViewModel>())
300-
.Select(t => t.StudentId)
301-
.Where(studentId => !selectedGroupsStudentIds.Contains(studentId))
302-
.ToArray();
303-
304-
var selectedStudentsData = selectedStudentIdsWithoutGroups.Length == (course.CourseMates?.Length ?? 0)
305-
? Array.Empty<AccountDataDto>()
306-
: await AuthServiceClient.GetAccountsData(selectedStudentIdsWithoutGroups);
307-
308-
var selectedStudents = selectedStudentsData
309-
.Where(x => x != null)
310-
.OrderBy(x => x.Surname)
311-
.ThenBy(x => x.Name)
312-
.ToArray();
313-
314-
var availableHomeworks = selectedGroups.Any()
315-
? (course.Homeworks ?? Array.Empty<HomeworkViewModel>())
316-
.Where(h => h.GroupId == null || selectedGroups.Any(g => g.Id == h.GroupId))
317-
.ToArray()
318-
: course.Homeworks ?? Array.Empty<HomeworkViewModel>();
319-
320-
var filteredHomeworks = mentorCourseView.Homeworks ?? Array.Empty<HomeworkViewModel>();
321-
var selectedHomeworks = filteredHomeworks.Length == availableHomeworks.Length
322-
? Array.Empty<HomeworkViewModel>()
323-
: filteredHomeworks;
324-
325-
return new WorkspaceViewModel
275+
return Ok(new WorkspaceViewModel
326276
{
327-
Homeworks = selectedHomeworks,
328-
Students = selectedStudents,
329-
Groups = selectedGroups,
330-
};
277+
Homeworks = mentorCourseView.Value.Homeworks,
278+
Students = students.OrderBy(x => x.Surname).ThenBy(x => x.Name).ToArray(),
279+
Groups = mentorCourseView.Value.Groups,
280+
});
331281
}
332282

333283
private async Task<CourseViewModel> ToCourseViewModel(CourseDTO course)

hwproj.front/src/components/Courses/Course.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from "react";
22
import {FC, useEffect, useState, useMemo} from "react";
33
import {useNavigate, useParams, useSearchParams} from "react-router-dom";
4-
import {AccountDataDto, CourseViewModel, GroupViewModel, HomeworkViewModel, StatisticsCourseMatesModel} from "@/api";
4+
import {AccountDataDto, CourseViewModel, HomeworkViewModel, StatisticsCourseMatesModel} from "@/api";
55
import StudentStats from "./StudentStats";
66
import NewCourseStudents from "./NewCourseStudents";
77
import ApiSingleton from "../../api/ApiSingleton";

hwproj.front/src/components/Courses/CourseFilter.tsx

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,38 @@ const CourseFilter: FC<ICourseFilterProps> = (props) => {
6363
const mentorWorkspace =
6464
await ApiSingleton.coursesApi.coursesGetMentorWorkspace(props.courseId, props.mentorId);
6565

66+
const courseGroups = course.groups?.filter(g => g.name?.trim()) ?? [];
67+
const selectedGroups = (mentorWorkspace.groups?.length === courseGroups.length
68+
? []
69+
: mentorWorkspace.groups ?? []
70+
)
71+
.filter(g => g.name?.trim());
72+
73+
const selectedGroupsStudents = selectedGroups.flatMap(g => g.studentsIds ?? []);
74+
const selectedStudentsWithoutGroups = mentorWorkspace.students
75+
?.filter(st => !selectedGroupsStudents.includes(st.userId!)) ?? [];
76+
const allCourseStudentsCount = (course.acceptedStudents?.length ?? 0) + (course.newStudents?.length ?? 0);
77+
const selectedStudents = selectedStudentsWithoutGroups.length === allCourseStudentsCount
78+
? []
79+
: selectedStudentsWithoutGroups;
80+
81+
const availableHomeworks = course.homeworks
82+
?.filter(h =>
83+
!h.groupId
84+
|| selectedGroups.length === 0
85+
|| selectedGroups.some(g => g.id === h.groupId));
86+
const selectedHomeworks = mentorWorkspace.homeworks?.length === availableHomeworks?.length
87+
? []
88+
: mentorWorkspace.homeworks ?? [];
89+
6690
setState(prevState => ({
6791
...prevState,
6892
courseHomeworks: course.homeworks ?? [],
6993
courseStudents: course.acceptedStudents ?? [],
70-
courseGroups: course.groups?.filter(g => g.name?.trim()) ?? [],
71-
selectedHomeworks: mentorWorkspace.homeworks ?? [],
72-
selectedStudents: mentorWorkspace.students ?? [],
73-
selectedGroups: mentorWorkspace.groups ?? [],
94+
courseGroups,
95+
selectedHomeworks,
96+
selectedStudents,
97+
selectedGroups,
7498
mentors: course.mentors!,
7599
assignedStudents: assignedStudents.filter(x => x.mentorId !== props.mentorId)
76100
}))

0 commit comments

Comments
 (0)