public async Task <PagedQueryResult <UserSummary> > ExecuteAsync(SearchUserSummariesQuery query, IExecutionContext executionContext)
        {
            var dbPagedResult = await CreateQuery(query).ToPagedResultAsync(query);

            var mappedResult = dbPagedResult
                               .Items
                               .Select(_userSummaryMapper.Map);

            return(dbPagedResult.ChangeType(mappedResult));
        }
 public IEnumerable <IPermissionApplication> GetPermissions(SearchUserSummariesQuery query)
 {
     if (query.UserAreaCode == CofoundryAdminUserArea.AreaCode)
     {
         yield return(new CofoundryUserReadPermission());
     }
     else
     {
         yield return(new NonCofoundryUserReadPermission());
     }
 }
        private IQueryable <User> CreateQuery(SearchUserSummariesQuery query)
        {
            var dbQuery = _dbContext
                          .Users
                          .AsNoTracking()
                          .Include(u => u.Role)
                          .Include(u => u.Creator)
                          .FilterCanLogIn()
                          .Where(p => p.UserAreaCode == query.UserAreaCode);

            if (!string.IsNullOrEmpty(query.Email))
            {
                dbQuery = dbQuery.Where(u => u.Email.Contains(query.Email));
            }

            // Filter by name
            if (!string.IsNullOrEmpty(query.Name))
            {
                var names = query.Name.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string name in names)
                {
                    // See http://stackoverflow.com/a/7288269/486434 for why this is copied into a new variable
                    string localName = name;

                    dbQuery = dbQuery.Where(u => u.FirstName.Contains(localName) || u.LastName.Contains(localName));
                }

                // Order by exact matches first
                dbQuery = dbQuery
                          .OrderByDescending(u => names.Contains(u.FirstName) && names.Contains(u.LastName))
                          .ThenByDescending(u => names.Contains(u.FirstName) || names.Contains(u.LastName));
            }
            else
            {
                dbQuery = dbQuery.OrderBy(u => u.LastName);
            }

            return(dbQuery);
        }
 public IContentRepositoryQueryContext <PagedQueryResult <UserSummary> > AsSummaries(SearchUserSummariesQuery query)
 {
     return(ContentRepositoryQueryContextFactory.Create(query, ExtendableContentRepository));
 }
Beispiel #5
0
        public async Task <PagedQueryResult <UserSummary> > ExecuteAsync(SearchUserSummariesQuery query, IExecutionContext executionContext)
        {
            var result = await CreateQuery(query).ToPagedResultAsync(query);

            return(result);
        }
Beispiel #6
0
 /// <summary>
 /// Seaches users based on simple filter criteria and returns a paged result.
 /// </summary>
 /// <param name="query">Search query parameters.</param>
 /// <param name="executionContext">Optional execution context to use when executing the query. Useful if you need to temporarily elevate your permission level.</param>
 public Task <PagedQueryResult <UserSummary> > SearchUserSummariesAsync(SearchUserSummariesQuery query, IExecutionContext executionContext = null)
 {
     return(_queryExecutor.ExecuteAsync(query, executionContext));
 }
 public Task <PagedQueryResult <UserSummary> > AsSummariesAsync(SearchUserSummariesQuery query)
 {
     return(ExtendableContentRepository.ExecuteQueryAsync(query));
 }