public async Task <ActionResult <FlashcardResponseByUnits> > Flashcards([FromRoute] Course course) { var userFlashcardsVisitsByCourse = await usersFlashcardsVisitsRepo.GetUserFlashcardsVisitsAsync(UserId, course.Id); var flashcardResponseByUnits = new FlashcardResponseByUnits(); var visibleUnits = await unitsRepo.GetVisibleUnitIds(course, UserId); foreach (var unit in course.GetUnits(visibleUnits)) { var unitFlashcardsResponse = new UnitFlashcardsResponse(); var unitFlashcards = unit.Flashcards; if (unitFlashcards.Count == 0) { continue; } var flashcardResponsesEnumerable = GetFlashcardResponses(unit, unitFlashcards, userFlashcardsVisitsByCourse); unitFlashcardsResponse.Flashcards.AddRange(flashcardResponsesEnumerable); unitFlashcardsResponse.UnitId = unit.Id; unitFlashcardsResponse.UnitTitle = unit.Title; unitFlashcardsResponse.Unlocked = await IsUnlocked(course, unit); flashcardResponseByUnits.Units.Add(unitFlashcardsResponse); } return(flashcardResponseByUnits); }
public async Task <ActionResult <GroupScoringGroupsResponse> > ScoringGroups(int groupId) { var group = await groupsRepo.FindGroupByIdAsync(groupId).ConfigureAwait(false); var course = await courseManager.FindCourseAsync(@group.CourseId); if (course == null) { log.Error($"It's strange: group {groupId} exists, but course {group.CourseId} not. I will return 404"); return(NotFound(new ErrorResponse("Group or course not found"))); } var scoringGroups = course.Settings.Scoring.Groups.Values.ToList(); var visibleUnitIds = await unitsRepo.GetVisibleUnitIds(course, UserId); var scoringGroupsCanBeSetInSomeUnit = GetScoringGroupsCanBeSetInSomeUnit(course.GetUnits(visibleUnitIds)); var enabledScoringGroups = await groupsRepo.GetEnabledAdditionalScoringGroupsForGroupAsync(groupId).ConfigureAwait(false); return(new GroupScoringGroupsResponse { Scores = scoringGroups.Select(scoringGroup => BuildGroupScoringGroupInfo(scoringGroup, scoringGroupsCanBeSetInSomeUnit, enabledScoringGroups)).ToList(), }); }
private async Task <UserFlashcardStatistics> GetUserFlashcardStatistics(GroupMember member, Group group, Course course) { var userStat = new UserFlashcardStatistics { UserId = member.UserId, UserName = member.User.VisibleNameWithLastNameFirst, GroupId = group.Id, GroupName = group.Name }; var userVisits = await usersFlashcardsVisitsRepo.GetUserFlashcardsVisitsAsync(member.UserId, course.Id); var visitsByUnits = userVisits.GroupBy(x => x.UnitId).ToDictionary(x => x.Key); var visibleUnitsIds = await unitsRepo.GetVisibleUnitIds(course, UserId); foreach (var unit in course.GetUnits(visibleUnitsIds)) { var unitStat = new UnitUserStatistic { UnitId = unit.Id, UnitTitle = unit.Title, TotalFlashcardsCount = unit.Flashcards.Count }; if (visitsByUnits.TryGetValue(unit.Id, out var unitGroup)) { var rate5FlashcardsIds = new HashSet <string>(); var uniqueFlashcardsIds = new HashSet <string>(); foreach (var visit in unitGroup) { if (visit.Rate == Rate.Rate5) { rate5FlashcardsIds.Add(visit.FlashcardId); } uniqueFlashcardsIds.Add(visit.FlashcardId); } unitStat.Rate5Count = rate5FlashcardsIds.Count; unitStat.UniqueFlashcardVisits = uniqueFlashcardsIds.Count; unitStat.TotalFlashcardVisits = unitGroup.Count(); } userStat.UnitUserStatistics.Add(unitStat); } return(userStat); }