public async Task <PagedResponse <AppUserResponse> > GetUsersWithRoles(List <string> roles,
                                                                               AppUserListQueryParameters queryParams)
        {
            var allRoles = Enum.GetValues(typeof(RolesEnum))
                           .OfType <RolesEnum>()
                           .Select(x =>
                                   new Role()
            {
                Id   = x.GetId(),
                Name = x.GetDisplayName()
            })
                           .ToArray();

            List <Guid> validRolesFromRequest;

            if (roles != null && roles.Count != 0)
            {
                validRolesFromRequest =
                    (from role in roles
                     select allRoles.FirstOrDefault(r => r.Name.ToLower().Equals(role.ToLower()))
                     into val
                     where val != null
                     select val.Id).ToList();
            }
            else
            {
                validRolesFromRequest = allRoles.Select(r => r.Id).ToList();
            }

            var usersWithRoles = await _gateway.GetUsersWithRoles(validRolesFromRequest.ToArray(), queryParams);

            var response = new PagedResponse <AppUserResponse>
            {
                PagingMetaData = usersWithRoles.PagingMetaData,
                Data           = usersWithRoles.ToResponse()
            };

            return(response);
        }
Ejemplo n.º 2
0
        public async Task <ActionResult <PagedResponse <AppUserResponse> > > GetUsersWithRoles([FromBody] UsersWithRolesRequest request, [FromQuery] AppUserListQueryParameters queryParams)
        {
            var res = await _getUsersUseCase.GetUsersWithRoles(request.Roles?.ToList(), queryParams).ConfigureAwait(false);

            return(Ok(res));
        }
        public async Task <PagedList <AppUserDomain> > GetUsersWithRoles(Guid[] roles, AppUserListQueryParameters queryParams)
        {
            var userIds = await _databaseContext.UserRoles.Where(ur => roles.Contains(ur.RoleId)).Select(ur => ur.UserId).Distinct().ToListAsync();

            var users = await _databaseContext.Users.Where(u => userIds.Contains(u.Id))
                        .FilterAppUsers(queryParams.searchTerm)
                        .Select(u => new AppUserDomain
            {
                Id    = u.Id,
                Name  = u.Name,
                Email = u.Email
            })
                        .ToListAsync();

            var userCount = await _databaseContext.Users.Where(u => userIds.Contains(u.Id))
                            .FilterAppUsers(queryParams.searchTerm)
                            .CountAsync();

            var pagedUsers = PagedList <AppUserDomain> .ToPagedList(users, userCount, queryParams.PageNumber, queryParams.PageSize);

            return(pagedUsers);
        }