예제 #1
0
        /// <summary>
        /// Returns all <see cref="IEnumerable<UserDocument>">users</see> matching <paramref name="filter"/>.
        /// </summary>
        /// <remarks>
        /// <see cref="string.StartsWith"/> is used for matching.
        /// </remarks>
        public IEnumerable <UserSummary> Find(UserSearchFilter filter, UserSearchOrderBy orderBy)
        {
            Guard.ArgumentNotNull(filter, nameof(filter));
            Guard.ArgumentNotNull(orderBy, nameof(orderBy));

            var queryable = AsQueryable();

            // Assuming filter conditions are or'd as most reasonable.
            // Any other filtering would have to be defined at the requirements level.
            var results = queryable.Where(u =>
                                          (!string.IsNullOrEmpty(filter.FirstName) && u.FirstName.StartsWith(filter.FirstName)) ||
                                          (!string.IsNullOrEmpty(filter.LastName) && u.LastName.StartsWith(filter.LastName)) ||
                                          (filter.HasUserEverConnected && u.LastConnectionDate != null) ||
                                          (!filter.HasUserEverConnected && u.LastConnectionDate == null)
                                          );

            // Assuming the orderings are mutually exclusive.
            // Any other logic would have to be defined at the requirements level.
            if (orderBy.LastConnectionDate)
            {
                results.OrderBy(u => u.LastConnectionDate);
            }
            else if (orderBy.CreationDate)
            {
                results.OrderBy(u => u.Audit.CreationDate);
            }
            else if (orderBy.LastName)
            {
                results.OrderBy(u => u.LastName);
            }

            var summary = results.ToList().Select(r => mapper.Map <UserSummary>(r));

            return(summary);
        }
예제 #2
0
        public IEnumerable <UserSummary> Find(
            [FromBody] UserSearchFilter filter,
            [FromQuery(Name = "orderByLastName")] bool orderByLastName,
            [FromQuery(Name = "orderByCreationDate")] bool orderByCreationDate,
            [FromQuery(Name = "orderByLastConnectionDate")] bool orderByLastConnectionDate)
        {
            var orderBy = new UserSearchOrderBy
            {
                LastName           = orderByLastName,
                CreationDate       = orderByCreationDate,
                LastConnectionDate = orderByLastConnectionDate
            };

            return(service.Find(filter, orderBy));
        }