예제 #1
0
        public static UserListVm ResultToUserListVm(GetUsersQueryResult results, IConfiguration config)
        {
            if (results == null)
            {
                throw new ArgumentNullException(string.Format(MessagesModel.NullValueError, "results"));
            }

            if (config == null)
            {
                throw new ArgumentNullException(string.Format(MessagesModel.NullValueError, "config"));
            }

            UserListVm vm = new UserListVm();

            vm.ItemsFound = results.Users.Count > 0;

            if (!vm.ItemsFound)
            {
                vm.Message      = MessagesModel.NoItemsFound;
                vm.MessageStyle = MessagesModel.MessageStyles.Info;
            }

            foreach (var result in results.Users)
            {
                UserListItemVm user = ResultToUserLitsItemVm(result, config);
                vm.Users.Add(user);
            }

            return(vm);
        }
예제 #2
0
            public void ToUserListVm_Should_Throw_Exception_When_Results_Is_Null()
            {
                GetUsersQueryResult results = null;

                IConfiguration config = GetConfig();

                UserListVm actual = UserModelHelper.ResultToUserListVm(results, config);
            }
예제 #3
0
            public void ToUserListVm_Should_Throw_Exception_When_Config_Is_Null()
            {
                ICollection <User>  users   = new List <User>();
                GetUsersQueryResult results = new GetUsersQueryResult(users);

                IConfiguration config = null;

                UserListVm actual = UserModelHelper.ResultToUserListVm(results, config);
            }
예제 #4
0
            public void ToUserListVm_Should_Return_UserListVm_When_No_Items_Found()
            {
                ICollection <User>  users   = new List <User>();
                GetUsersQueryResult results = new GetUsersQueryResult(users);

                IConfiguration config = GetConfig();

                UserListVm actual = UserModelHelper.ResultToUserListVm(results, config);

                Assert.AreEqual(MessagesModel.NoItemsFound, actual.Message);
                Assert.AreEqual(MessagesModel.MessageStyles.Info, actual.MessageStyle);
            }
예제 #5
0
        public UserListVm GetUsers(GetUsersQuery query)
        {
            if (query == null)
            {
                throw new ArgumentNullException(string.Format(MessagesModel.NullValueError, "query"));
            }

            GetUsersQueryResult results = this.queryDispatcher.Dispatch <GetUsersQuery, GetUsersQueryResult, User>(query);

            UserListVm vm = UserModelHelper.ResultToUserListVm(results, this.config);

            return(vm);
        }
예제 #6
0
            public void ToUserListVm_Should_Return_UserListVm_When_Items_Found()
            {
                DateTime           date  = DateTime.Now;
                ICollection <User> users = new List <User>();
                User user = this.GetUser(true, "1");

                users.Add(user);
                user = this.GetUser(true, "2");
                users.Add(user);
                user = this.GetUser(true, "3");
                users.Add(user);
                GetUsersQueryResult results = new GetUsersQueryResult(users);

                IConfiguration config = GetConfig();

                UserListVm actual = UserModelHelper.ResultToUserListVm(results, config);

                Assert.AreEqual(3, actual.Users.Count);
            }
예제 #7
0
        /// <summary>
        /// Method to get all users
        /// </summary>
        /// <param name = "filter"> Filter </param>
        /// <returns> </returns>
        public async Task <UserListVm> GetAllPagedAsync(UserListFilter filter)
        {
            var query = _context.Users.AsNoTracking();

            if (filter.Status.HasValue)
            {
                query = query.Where(u => u.Status == filter.Status.Value);
            }
            if (filter.RoleId != null)
            {
                query = query.Where(u => u.UserRoles.Any(v => v.RoleId == filter.RoleId));
            }
            if (filter.UserName != null)
            {
                query = query.Where(u => u.Name.ToLower().Contains(filter.UserName.ToLower()));
            }
            if (filter.Description != null)
            {
                query = query.Where(u => u.Description.Contains(filter.Description));
            }

            var total = query.Count();

            var orderable = total == 0
                ? Array.Empty <UserListItemVm>().AsQueryable()
                : query.Select(UserListItemVm.Creator);

            if (filter.SortBy != null)
            {
                //TODO: USE LINQ DYNAMIC + ATTRIBUTES
                switch (filter.SortBy.UpperFirstLetter())
                {
                case nameof(UserListItemVm.Name):
                    orderable = Order(orderable, v => v.Name, filter.SortAscending);
                    break;

                case nameof(UserListItemVm.CreationDate):
                    orderable = Order(orderable, v => v.CreationDate, filter.SortAscending);
                    break;

                case nameof(UserListItemVm.Description):
                    orderable = Order(orderable, v => v.Description, filter.SortAscending);
                    break;

                default:
                    orderable = Order(orderable, v => v.Status, filter.SortAscending);
                    break;
                }
            }

            var users = orderable
                        .Skip(Pagination.CalculateSkip(filter.PageSize, filter.Page, total))
                        .Take(filter.PageSize);

            var usersList = users.ToList();

            var userIds = usersList.Select(v => v.Id).ToList();

            var roles = from userRole in _context.UserRoles
                        join role in _context.Roles on userRole.RoleId equals role.Id
                        where userIds.Contains(userRole.UserId)
                        select new
            {
                userRole.UserId,
                role.Id,
                role.Name
            };

            var lookup = roles.ToLookup(
                v => v.UserId,
                v => new UserRoleVm {
                Id = v.Id, Name = v.Name
            }
                );
            var allRegions = await _regionsService.GetAllRegionTreeAsync(nameof(Resource.UserRegions));

            foreach (var user in usersList)
            {
                user.Roles = lookup[user.Id].ToList();
            }

            return(UserListVm.Create(
                       usersList,
                       allRegions,
                       total,
                       (int)Math.Ceiling((double)total / filter.PageSize)
                       ));
        }
예제 #8
0
 private void Bind()
 {
     this.Vm = this.model.GetUsers(this.query);
     this.UserGrid.Visible = this.Vm.ItemsFound;
     this.BindGrid(this.Vm.Users);
 }