示例#1
0
        public void QueryOrganizationUsers_Test()
        {
            var transactionMock = new Mock <IDbContextTransaction>();

            database.Setup(d => d.BeginTransaction()).Returns(transactionMock.Object);
            context.Setup(e => e.Database).Returns(database.Object);
            SetupOrganizationUsersDbSet(new List <OrganizationUserEntity>(new[] {
                new OrganizationUserEntity
                {
                    OrganizationUserEntityId = 5,
                    OrganizationId           = 1,
                    UserType      = 2,
                    FirstName     = "Andrei",
                    LastName      = "Daniel",
                    Email         = "*****@*****.**",
                    IsActive      = true,
                    TransactionId = "abc0"
                }
            }));

            var orgUserRoles = Ext.MockDbSet(new List <OrganizationUserRoleEntity> {
                new OrganizationUserRoleEntity()
            });

            context.Setup(ctx => ctx.OrganizationUserRoles).Returns(orgUserRoles.Object);

            var rolePermissions = Ext.MockDbSet(new List <RolePermissionEntity> {
            });

            context.Setup(ctx => ctx.RolePermissions).Returns(rolePermissions.Object);

            var criteria = new QueryOrganizationUsersCriteria
            {
                OrganizationId = 1,
                Q         = "Andrei",
                OrderBy   = "firstName",
                Direction = "asc",
                Page      = 1,
                PageSize  = 1,
                UserTypes = new List <int> {
                    1, 2
                }
            };



            var res = organizationUserRepository.QueryOrganizationUsers(criteria);


            Assert.True(res.Result.Count > 0);
        }
示例#2
0
        public Result <QueryOrganizationUsersResult> QueryOrganizationUsers(QueryOrganizationUsersCriteria criteria)
        {
            if (criteria == null)
            {
                return(new Result <QueryOrganizationUsersResult>(OrganizationUserServiceErrors.InvalidQueryParameters(nameof(criteria))));
            }

            if (criteria.Page == null || criteria.Page.Value <= 0)
            {
                criteria.Page = 1;
            }

            if (criteria.PageSize == null || criteria.PageSize.Value <= 0)
            {
                criteria.PageSize = 10;
            }

            string[] sortableFields = { "firstname", "lastname", "email", "username", "createdat", "islocked", "ispendingactivation", "isactive", "lastlogintime" };

            if (!sortableFields.Contains(criteria.OrderBy, StringComparer.OrdinalIgnoreCase))
            {
                criteria.OrderBy = string.Empty;
            }

            if (string.IsNullOrWhiteSpace(criteria.Direction))
            {
                criteria.Direction = "ASC";
            }
            if (!criteria.Direction.ToUpper().Equals("ASC") && !criteria.Direction.ToUpper().Equals("DESC"))
            {
                criteria.Direction = "ASC";
            }

            var result = organizationUserRepository.QueryOrganizationUsers(criteria);

            return(new Result <QueryOrganizationUsersResult>(result));
        }
示例#3
0
        public QueryOrganizationUsersResult QueryOrganizationUsers(QueryOrganizationUsersCriteria criteria)
        {
            if (criteria.Page == null || criteria.PageSize == null)
            {
                return(null);
            }

            var pageSize  = criteria.PageSize.Value;
            var pageValue = criteria.Page.Value;

            var queryable = this
                            .GetValidOrganizationUsers(criteria.OrganizationId);

            if (criteria.UserTypes.Any())
            {
                queryable = queryable.Where(ou => criteria.UserTypes.Contains(ou.UserType));
            }

            if (!string.IsNullOrWhiteSpace(criteria.Q))
            {
                queryable = queryable.Where(
                    p => p.FirstName.Contains(criteria.Q, StringComparison.OrdinalIgnoreCase) ||
                    p.LastName.Contains(criteria.Q, StringComparison.OrdinalIgnoreCase) ||
                    p.Email != null && p.Email.Contains(criteria.Q, StringComparison.OrdinalIgnoreCase)
                    );
            }

            if (criteria.IsActive.HasValue)
            {
                var isActive = (bool)criteria.IsActive;
                queryable = queryable.Where(p => p.IsActive == isActive);
            }

            if (!string.IsNullOrWhiteSpace(criteria.OrderBy))
            {
                bool orderByAscending = criteria.Direction.ToUpper() == "ASC";
                var  orderByField     = criteria.OrderBy.ToLowerInvariant();

                switch (orderByField)
                {
                case "firstname":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => p.FirstName)
                            : queryable.OrderByDescending(p => p.FirstName);
                    break;

                case "lastname":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => p.LastName)
                            : queryable.OrderByDescending(p => p.LastName);
                    break;

                case "email":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => p.Email)
                            : queryable.OrderByDescending(p => p.Email);
                    break;

                case "username":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => p.Username)
                            : queryable.OrderByDescending(p => p.Username);
                    break;

                case "createdat":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => p.CreatedAt)
                            : queryable.OrderByDescending(p => p.CreatedAt);
                    break;

                case "islocked":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => !p.IsLocked)
                            : queryable.OrderByDescending(p => !p.IsLocked);
                    break;

                case "ispendingactivation":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => !p.IsPendingActivation)
                            : queryable.OrderByDescending(p => !p.IsPendingActivation);
                    break;

                case "isactive":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => !p.IsActive)
                            : queryable.OrderByDescending(p => !p.IsActive);
                    break;

                case "lastlogintime":
                    queryable = orderByAscending
                            ? queryable.OrderBy(p => p.LastLoginAt)
                            : queryable.OrderByDescending(p => p.LastLoginAt);
                    break;
                }
            }

            //var resultQuery = queryable
            //    .Join(context.OrganizationUserRoles,
            //        organizationUser => organizationUser.OrganizationUserEntityId,
            //        organizationUserRoles => organizationUserRoles.OrganizationUserRoleEntityId,
            //        (organizationUser, organizationUserRoles) => new { organizationUser, organizationUserRoles })

            //    .Join(context.RolePermissions,
            //        rolePermission => rolePermission.organizationUserRoles.RoleId,
            //        r => r.RoleId,
            //        (rolePermission, r) => new { rolePermission, r }
            //        )
            //    ;

            var count = queryable.Count();

            int page = (pageValue - 1) * pageSize;

            var views = queryable
                        .Skip(page)
                        .Take(pageSize)
                        .ToList();

            var results = views.Select(p => this.mapper.Map <OrganizationUsersListModel>(p))
                          .ToList();

            foreach (var x in results)
            {
                var roles = this
                            .GetValidOrganizationUserRoles(x.OrganizationUserId, x.OrganizationId)
                            .Join(context.RolePermissions,
                                  organizationUserRoles => organizationUserRoles.RoleId,
                                  rolePermissions => rolePermissions.RoleId,
                                  (our, rp) => new OrganizationUserRoleCustomModel
                {
                    RoleName    = rp.RoleName,
                    Description = rp.Description,
                    IsDefault   = rp.IsDefault,
                    DeletedAt   = rp.DeletedAt,
                    DisplayName = rp.DisplayName
                }
                                  )
                            .Where(ourcm => ourcm.DeletedAt == null);

                x.Roles = roles.Select(
                    p => this.mapper.Map <RoleListModel>(p)
                    ).ToList();
            }


            var result = new QueryOrganizationUsersResult
            {
                Pagination = new PaginationModel(count, pageValue, pageSize),
                Result     = results
            };

            return(result);
        }