Ejemplo n.º 1
0
        private async Task <GroupsListResponse> GetGroupsListResponseAsync(GroupsListParameters parameters)
        {
            var groups = await groupAccessesRepo.GetAvailableForUserGroupsAsync(parameters.CourseId, UserId, false, !parameters.Archived, parameters.Archived).ConfigureAwait(false);

            /* Order groups by (name, createTime) and get one page of data (offset...offset+count) */
            var groupIds = groups.OrderBy(g => g.Name, StringComparer.InvariantCultureIgnoreCase).ThenBy(g => g.Id)
                           .Skip(parameters.Offset)
                           .Take(parameters.Count)
                           .Select(g => g.Id)
                           .ToImmutableHashSet();
            var filteredGroups = groups.Where(g => groupIds.Contains(g.Id)).ToList();

            var groupMembers = await groupMembersRepo.GetGroupsMembersAsync(groupIds).ConfigureAwait(false);

            var membersCountByGroup = groupMembers.GroupBy(m => m.GroupId).ToDictionary(g => g.Key, g => g.Count()).ToDefaultDictionary();

            var groupAccessesByGroup = await groupAccessesRepo.GetGroupAccessesAsync(groupIds).ConfigureAwait(false);

            var groupInfos = filteredGroups.Select(g => BuildGroupInfo(
                                                       g,
                                                       membersCountByGroup[g.Id],
                                                       groupAccessesByGroup[g.Id],
                                                       addGroupApiUrl: true
                                                       )).ToList();

            return(new GroupsListResponse
            {
                Groups = groupInfos,
                Pagination = new PaginationResponse
                {
                    Offset = parameters.Offset,
                    Count = filteredGroups.Count,
                    TotalCount = groups.Count,
                }
            });
        }
Ejemplo n.º 2
0
 public async Task <ActionResult <GroupsListResponse> > GroupsList([FromQuery] GroupsListParameters parameters)
 {
     return(await GetGroupsListResponseAsync(parameters).ConfigureAwait(false));
 }
Ejemplo n.º 3
0
 public async Task <ActionResult <GroupsListResponse> > ArchivedGroupsList(ICourse course, [FromQuery] GroupsListParameters parameters)
 {
     return(await GetGroupsListResponseAsync(course, parameters, onlyArchived : true).ConfigureAwait(false));
 }