Пример #1
0
        public Result <QueryGroupMemberResult> QueryGroupMember(QueryGroupMemberCriteria criteria)
        {
            if (criteria.GroupId <= 0)
            {
                return(new Result <QueryGroupMemberResult>(GroupServiceErrors.InvalidQueryGroupMemberDataError(nameof(criteria.GroupId))));
            }

            if (criteria.OrganizationId <= 0)
            {
                return(new Result <QueryGroupMemberResult>(GroupServiceErrors.InvalidQueryGroupMemberDataError(nameof(criteria.OrganizationId))));
            }
            if (!groupRepository.GroupExists(criteria.GroupId, criteria.OrganizationId))
            {
                return(new Result <QueryGroupMemberResult>(GroupServiceErrors.GroupNotFoundError()));
            }
            if (criteria.Page == null || criteria.Page.Value <= 0)
            {
                criteria.Page = 1;
            }

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

            string[] sortableFields = groupRepository.GetGroupMemberSortableFields();
            if (!sortableFields.Contains(criteria.OrderBy, StringComparer.OrdinalIgnoreCase))
            {
                criteria.OrderBy = groupRepository.GetDefaultSortField();
            }

            if (!string.Equals(criteria.Direction, "DESC", StringComparison.OrdinalIgnoreCase))
            {
                criteria.Direction = "ASC";
            }
            var queryGroupMemberResult = groupRepository.QueryGroupMember(criteria);

            return(new Result <QueryGroupMemberResult>(queryGroupMemberResult));
        }
Пример #2
0
        public QueryGroupMemberResult QueryGroupMember(QueryGroupMemberCriteria criteria)
        {
            if (criteria.Page == null || criteria.PageSize == null)
            {
                return(null);
            }

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

            var targetUserTypes = criteria.TargetUserTypes;

            var query = GetValidGroupMembers(criteria.OrganizationId)
                        .Include(gm => gm.Member)
                        .Where(gm => gm.GroupId == criteria.GroupId &&
                               targetUserTypes.Any(t => t == gm.Member.UserType) &&
                               gm.Member.DeletedAt == null);

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

                switch (orderByField)
                {
                case GmSortUsername:
                    query = query.OrderBy(p => p.Member.Username, !orderByAscending);
                    break;

                case GmSortCreationtime:
                    query = query.OrderBy(p => p.CreatedAt, !orderByAscending);
                    break;

                case GmSortUserType:
                    query = query.OrderBy(p => p.Member.UserType, !orderByAscending);
                    break;

                case GmSortFirstName:
                    query = query.OrderBy(p => p.Member.FirstName, !orderByAscending);
                    break;

                case GmSortLastName:
                    query = query.OrderBy(p => p.Member.LastName, !orderByAscending);
                    break;

                default:
                    query = query.OrderBy(p => p.CreatedAt, true);
                    break;
                }
            }
            var count = query.Count();

            int page = (pageValue - 1) * pageSize;

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

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

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

            return(result);
        }