private void UpdateEnrollmentsStudents(User student) { //Get student identifier var identifier = student.ToIdentifier(); //Get modules runs for that student var moduleRunStudentsFilter = Builders <ModuleRun> .Filter.AnyEq(x => x.Students, identifier); var oldIds = ModuleRuns.Find(moduleRunStudentsFilter).Project(x => x.Id).ToList(); //Get student enrollments var studentEnrollmentsFilter = Builders <ModuleRun> .Filter.In(x => x.Id, student.Enrollments.Select(x => x.Id)); var newIds = ModuleRuns.Find(studentEnrollmentsFilter).Project(x => x.Id).ToList(); //Remove enrollments not present, ignoring enrollments we want to insert oldIds.Except(newIds).ToList().ForEach(runId => { var moduleRunIdFilter = Builders <ModuleRun> .Filter.Eq(x => x.Id, runId); var moduleRunStudentsUpdate = Builders <ModuleRun> .Update.Pull(x => x.Students, identifier); ModuleRuns.UpdateOne(moduleRunIdFilter, moduleRunStudentsUpdate); }); //Insert new set of enrollments, ignoring enrollments already present newIds.Except(oldIds).ToList().ForEach(runId => { var moduleRunIdFilter = Builders <ModuleRun> .Filter.Eq(x => x.Id, runId); var moduleRunStudentsUpdate = Builders <ModuleRun> .Update.Push(x => x.Students, identifier); ModuleRuns.UpdateOne(moduleRunIdFilter, moduleRunStudentsUpdate); }); }
/// <summary> /// inside this method we call the rest api and retrieve a data /// </summary> /// <returns></returns> protected async override Task OnInitializedAsync() { int.TryParse(Id, out int planId); if (planId != 0) { Plan = await PlanService.GetPlan(int.Parse(Id)); AutumnSemester = Plan.AutumnSemester; SpringSemester = Plan.SpringSemester; Semesters = new List <SemesterDto> { AutumnSemester, SpringSemester }; SemesterId = Semester.SemesterId.ToString(); ModuleId = Module.ModuleId.ToString(); Lmr = new LecturerModuleRunDto(); SelectedPlanId = Plan.Id; ListLmr = (await LecturerModuleRunService.GetLecturerModuleRuns()).ToList(); foreach (var sem in Semesters) { foreach (var mr in sem.ModuleRuns) { ModuleRuns.Add(mr); } } await ShowLastYearPlan(); } else { Plan = new PlanDto { }; Semester = new SemesterDto { }; Module = new ModuleDto { }; ListLmr = new List <LecturerModuleRunDto> { }; } Plans = (await PlanService.GetPlans()).ToList(); ModuleRuns = (await ModuleRunService.GetModuleRuns()).ToList(); Modules = (await ModuleService.GetModules()).ToList(); Lecturers = (await LecturerService.GetLecturers()).ToList(); LecturerGroups = (await LecturerGroupService.GetLecturerGroups()).ToList(); }