/// <summary>
        /// Gets last 20 users
        /// </summary>
        /// <param name="search">Search string</param>
        /// <returns>TwitterUserInfo list</returns>
        public List <TwitterUserInfo> FindUsers(string search)
        {
            const int pageRowCount = 20;
            const int pageNumber   = 0;

            try
            {
                Twitterizer.OAuthTokens tokens = GetOAuthTokens();

                UserSearchOptions options = new UserSearchOptions();
                options.Page          = pageNumber;
                options.NumberPerPage = pageRowCount;

                TwitterResponse <TwitterUserCollection> userResponse = TwitterUser.Search(tokens, search, options);
                if (userResponse.Result == RequestResult.Success)
                {
                    TwitterUserCollection collection = userResponse.ResponseObject;
                    return(MapUsers(userResponse.ResponseObject));
                }
                else
                {
                    throw CreateException(userResponse.Result, userResponse.ErrorMessage);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex);
                throw;
            }
        }
示例#2
0
        public List <UserSearchResult> Match(User client, UserSearchOptions options)
        {
            List <UserSearchResult> results = new List <UserSearchResult>();
            int age = client.Age;

            List <User> users = _repository.Users.GetAllUsers().Where(x => (x.Country == options.Country || options.Country == "all") &&
                                                                      (x.City == options.City || options.City == "Всі") && (options.MinAge <= age && age <= options.MaxAge) && x.TelephoneNumber != client.TelephoneNumber &&
                                                                      (x.Sex == options.Sex || options.Sex == "all")).ToList();

            if (options.Interests == null)
            {
                foreach (var user in users)
                {
                    results.Add(Calculate(client, user));
                }
                return(results);
            }

            foreach (var user in users)
            {
                if (FilterInterests(user, options.Interests))
                {
                    results.Add(Calculate(client, user));
                }
            }

            return(results);
        }
示例#3
0
        public async Task <UserSearchResponse[]> SearchAsync(UserSearchOptions options)
        {
            string url  = apiUrl + USER_URL + options.GetSearchPartAddress();
            string json = await GetSearchResponseAsync(url);

            return(UserSearchResponse.FromJson(json));
        }
示例#4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UserSearchCommand"/> class.
        /// </summary>
        /// <param name="tokens">The request tokens.</param>
        /// <param name="query">The query.</param>
        /// <param name="options">The options.</param>
        public UserSearchCommand(OAuthTokens tokens, string query, UserSearchOptions options)
            : base(HttpMethod.Get, "users/search.json", tokens, options)
        {
            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentNullException("query");
            }

            this.Query = query;
        }
示例#5
0
        /// <inheritdoc />
        public async Task <List <User> > Search(UserSearchOptions searchOptions)
        {
            var users = await Table.Where(user =>

                                          (!searchOptions.Id.HasValue || user.Id == searchOptions.Id) &&
                                          (String.IsNullOrWhiteSpace(searchOptions.Email) || searchOptions.Email == user.Email)

                                          ).ToListAsync();

            return(users);
        }
示例#6
0
        public IActionResult SearchPotentials(string num, [FromBody] UserSearchOptions options)
        {
            User user = _repository.Users.GetByNumber(num);

            if (user == null)
            {
                return(NotFound());
            }

            var results = _matcher.Match(user, options);

            return(Ok(results));
        }
示例#7
0
        /// <summary>
        /// Initializes a new instance of the <see cref="UserSearchCommand"/> class.
        /// </summary>
        /// <param name="tokens">The request tokens.</param>
        /// <param name="query">The query.</param>
        /// <param name="options">The options.</param>
        public UserSearchCommand(OAuthTokens tokens, string query, UserSearchOptions options)
            : base(HTTPVerb.GET, "users/search.json", tokens, options)
        {
            if (tokens == null)
            {
                throw new ArgumentNullException("tokens");
            }

            if (string.IsNullOrEmpty(query))
            {
                throw new ArgumentNullException("query");
            }

            this.Query = query;
        }
示例#8
0
        /// <summary>
        /// Initializes the command.
        /// </summary>
        public override void Init()
        {
            this.RequestParameters.Add("q", this.Query);

            UserSearchOptions options = this.OptionalProperties as UserSearchOptions;

            if (options == null)
            {
                this.RequestParameters.Add("page", "1");

                return;
            }

            if (options.NumberPerPage > 0)
            {
                this.RequestParameters.Add("per_page", options.NumberPerPage.ToString(CultureInfo.InvariantCulture));
            }

            this.RequestParameters.Add("page", options.Page > 0 ? options.Page.ToString(CultureInfo.InvariantCulture) : "1");
        }
示例#9
0
        public async Task <SearchResult <User> > SearchUsersAsync(UserSearchOptions searchOptions)
        {
            var searchResult = new SearchResult <User>();

            try
            {
                if (searchOptions == null)
                {
                    return(searchResult);
                }

                var userQuery = _appDbContext.Users.AsQueryable();

                if (searchOptions.Name.HasValue())
                {
                    userQuery = userQuery.Where(x =>
                                                x.FirstName.ToLowerInvariant().Contains(searchOptions.Name) ||
                                                x.MiddleName.ToLowerInvariant().Contains(searchOptions.Name) ||
                                                x.LastName.ToLowerInvariant().Contains(searchOptions.Name));
                }

                userQuery = userQuery.OrderBy(x => x.LastName);

                searchResult.Page        = searchOptions.Page;
                searchResult.PageSize    = searchOptions.PageSize;
                searchResult.TotalResult = await userQuery.CountAsync();

                searchResult.Result = UserEntityMapper.MapUsers(await userQuery.TakeItems(searchOptions.Page, searchOptions.PageSize).ToListAsync());
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, $"[{ErrorCode.UserService003}] {ex.Message}");
            }

            return(searchResult);
        }
 public void InitializeUsers(IEnumerable <ForecastUserDto> newUsers)
 {
     UserSearchOptions.InitializeUsers(newUsers);
 }
示例#11
0
        public async Task <IActionResult> Post([FromBody] UserSearchOptions userSearchOptions)
        {
            using (var repository = new Repository(HttpContext.GetUserGuid()))
            {
                if (!AuthorizeService.HashRight(repository.ServiceUser?.Role, Rights.ViewPlayer))
                {
                    return(Forbid());
                }

                var query = repository.Context.Users.Include(x => x.Role).AsNoTracking();

                if (!string.IsNullOrWhiteSpace(userSearchOptions.Search))
                {
                    query = query.Where(x => x.Name.Contains(userSearchOptions.Search) || x.Email.Contains(userSearchOptions.Search));
                }

                if (userSearchOptions.IsVerified.HasValue)
                {
                    var isVerified = userSearchOptions.IsVerified.Value;
                    query = query.Where(x => x.IsVerified == isVerified);
                }

                if (userSearchOptions.IsDisabled.HasValue)
                {
                    var isDisabled = userSearchOptions.IsDisabled.Value;
                    query = query.Where(x => x.IsDisabled == isDisabled);
                }

                if (userSearchOptions.Role != null)
                {
                    query = query.Where(x => x.Role.Guid == userSearchOptions.Role.Guid);
                }

                var totalCount = query.Count();

                // default order by
                if (string.IsNullOrWhiteSpace(userSearchOptions.OrderBy))
                {
                    userSearchOptions.OrderBy = "Name";
                }

                var orderByType = QueryHelper.GetPropertyType <UserModel>(userSearchOptions.OrderBy);
                if (orderByType != null)
                {
                    if (orderByType == typeof(string))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <UserModel, string>(userSearchOptions.OrderBy);
                        query = userSearchOptions.ReverseOrder ? query.OrderByDescending(orderByExpression) : query.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(int))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <UserModel, int>(userSearchOptions.OrderBy);
                        query = userSearchOptions.ReverseOrder ? query.OrderByDescending(orderByExpression) : query.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(DateTime))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <UserModel, DateTime>(userSearchOptions.OrderBy);
                        query = userSearchOptions.ReverseOrder ? query.OrderByDescending(orderByExpression) : query.OrderBy(orderByExpression);
                    }
                    if (orderByType == typeof(bool))
                    {
                        var orderByExpression = QueryHelper.GetPropertyExpression <UserModel, bool>(userSearchOptions.OrderBy);
                        query = userSearchOptions.ReverseOrder ? query.OrderByDescending(orderByExpression) : query.OrderBy(orderByExpression);
                    }
                }

                userSearchOptions.PageSize = Math.Min(50, userSearchOptions.PageSize);

                var userModels = await query.Skip((userSearchOptions.PageNumber - 1) *userSearchOptions.PageSize)
                                 .Take(userSearchOptions.PageSize)
                                 .ToListAsync();

                var result = new ResultList <User>(userModels.Select(x => x.FromDal(true)).ToList())
                {
                    TotalItems    = totalCount,
                    SearchOptions = userSearchOptions
                };
                return(Ok(result));
            }
        }
示例#12
0
        public async Task <User> GetAsync(Action <UserSearchOptions> searchOptionsBuilder)
        {
            UserSearchOptions searchOptions = new UserSearchOptions();

            searchOptionsBuilder(searchOptions);

            IQueryable <User> users = userDbSet.AsQueryable <User>();

            if (searchOptions.WithRole)
            {
                users = users.Include(u => u.Role);
            }
            if (searchOptions.WithRequests)
            {
                users = users.Include(u => u.Requests);
            }
            if (searchOptions.WithRequestImages)
            {
                users = users.Include(u => u.Requests).ThenInclude(r => r.Images);
            }
            if (searchOptions.WithRequestResponses)
            {
                users = users.Include(u => u.Requests).ThenInclude(r => r.Response);
            }
            if (searchOptions.WithResponseImages)
            {
                users = users.Include(u => u.Requests).ThenInclude(r => r.Response).ThenInclude(r => r.Images);
            }

            users = users.Select(u => new User()
            {
                UserId   = u.UserId,
                Email    = u.Email,
                Nickname = u.Nickname,
                Role     = u.Role,
                Requests = u.Requests,
                Password = searchOptions.WithPassword ? u.Password : null
            });

            User user = null;

            switch (searchOptions.SearchType)
            {
            case UserSearchTypes.ById:
                user = await users.FirstOrDefaultAsync(u => u.UserId == searchOptions.UserId);

                if (user == null)
                {
                    throw new UserNotFoundException($"Not found user with id equal {searchOptions.UserId}.");
                }
                break;

            case UserSearchTypes.ByEmail:
                user = await users.FirstOrDefaultAsync(u => u.Email == searchOptions.Email);

                if (user == null)
                {
                    throw new UserNotFoundException($"Not found user with email equal {searchOptions.Email}.");
                }
                break;

            case UserSearchTypes.ByNickname:
                user = await users.FirstOrDefaultAsync(u => u.Nickname == searchOptions.Nickname);

                if (user == null)
                {
                    throw new UserNotFoundException($"Not found user with nickname equal {searchOptions.Nickname}.");
                }
                break;

            case UserSearchTypes.WithoutProperty:
                break;
            }

            if (searchOptions.FromRequest.HasValue)
            {
                user.Requests = user.Requests.OrderByDescending(r => r.RequestId).Skip(searchOptions.FromRequest.Value).ToList();
            }
            if (searchOptions.RequestsCount.HasValue)
            {
                user.Requests = user.Requests.OrderByDescending(r => r.RequestId).Take(searchOptions.RequestsCount.Value).ToList();
            }

            return(user);
        }