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)); }
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); }