Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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(),
            });
        }
Ejemplo n.º 3
0
        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);
        }