public async Task <(List <ApplicationUser> users, int count)> GetUsersAsync(UserRequestParameters parameters) { int skipCount = (parameters.Page - 1) * parameters.PageSize; SqlBuilder sqlBuilder = new SqlBuilder(); SqlBuilder.Template countExpression = sqlBuilder.AddTemplate( $@"SELECT COUNT (DISTINCT AspNetUsers.Id) FROM AspNetUsers /**where**/"); SqlBuilder.Template itemsExpression = sqlBuilder.AddTemplate( $@"SELECT * FROM (SELECT DISTINCT AspNetUsers.* FROM AspNetUsers /**where**/ /**orderby**/) AS FilteredUsers"); sqlBuilder.Where($"AspNetUsers.UserName != '{AdminCredentials.UserName}'"); if (!string.IsNullOrWhiteSpace(parameters.KeyWord)) { parameters.KeyWord = parameters.KeyWord.ToLower(); sqlBuilder.Where($@"LOWER(AspNetUsers.FirstName + ' ' + AspNetUsers.LastName + ' ' + AspNetUsers.UserName + ' ' + AspNetUsers.Email) LIKE '%' + @KeyWord + '%'"); } int count = await _connection.ExecuteScalarAsync <int>(countExpression.RawSql, parameters); sqlBuilder.OrderBy($"AspNetUsers.CreationDate DESC OFFSET @Skip ROWS FETCH NEXT @PageSize ROWS ONLY"); List <ApplicationUser> response = (await _connection.QueryAsync <ApplicationUser>(itemsExpression.RawSql, parameters)).ToList(); return(response, count); }
private IDictionary <string, string> GetDetailsParameters(UserRequestParameters requestParameters) { IDictionary <string, string> parameters = new Dictionary <string, string> { ["ids"] = string.Join(",", requestParameters.Ids), ["size"] = requestParameters.Size.ToString(), }; return(parameters); }
public async Task <UserResponseModel> GetUsersAsync(UserRequestModel requestModel) { UserRequestParameters parameters = requestModel.MapToRequestParameters(); (List <ApplicationUser> users, int count) = await _userRepository.GetUsersAsync(parameters); List <UserModel> userModels = users.Select(item => new UserModel(item)).ToList(); UserResponseModel responseModel = new UserResponseModel() { Count = count, UserModels = userModels }; return(responseModel); }
public UserRequestParameters MapToRequestParameters() { UserRequestParameters parameters = new UserRequestParameters(); if (Page != default(int)) { parameters.Page = Page; } if (PageSize != default(int)) { parameters.PageSize = PageSize; } if (!string.IsNullOrWhiteSpace(KeyWord)) { parameters.KeyWord = KeyWord; } return(parameters); }
public async Task <UserResultSet> Details(UserRequestParameters requestParameters) { if (requestParameters == null) { throw new ArgumentNullException(nameof(requestParameters)); } if (requestParameters.Ids == null || !requestParameters.Ids.Any()) { throw new ArgumentException("User Ids are required.", nameof(requestParameters.Ids)); } if (requestParameters.Ids.Count > 100) { throw new ArgumentException("Maximum size of id list is 100", nameof(requestParameters.Ids)); } var requestUrl = UrlHelper.GenerateApiUrl(_wikiApiUrl, _user); var parameters = GetDetailsParameters(requestParameters); var json = await _wikiaHttpClient.Get(requestUrl, parameters); return(JsonHelper.Deserialize <UserResultSet>(json)); }
public async Task <(List <ApplicationUser> users, int count)> GetUsersAsync(UserRequestParameters parameters) { IQueryable <ApplicationUser> users = _dbSet; users = users.Where(item => item.UserName != AdminCredentials.UserName); if (!string.IsNullOrWhiteSpace(parameters.KeyWord)) { users = users.Where(item => item.FirstName.Contains(parameters.KeyWord) || item.LastName.Contains(parameters.KeyWord) || item.Email.Contains(parameters.KeyWord) || item.UserName.Contains(parameters.KeyWord)); } int count = await users.CountAsync(); int countToSkip = (--parameters.Page) * parameters.PageSize; users = users.Skip(countToSkip).Take(parameters.PageSize); List <ApplicationUser> response = await users.ToListAsync(); return(response, count); }