public async Task <ListResponseModel <TModel> > GetListAppUserAsync <TModel>( ListAppUserRequestModel requestModel, ParsingConfig parsingConfig = null) { #region Validation var userInfo = contextProvider.BusinessContext.PrincipalInfo; var validationData = new ValidationData(resultLocalizer); // validation logic here if (!validationData.IsValid) { throw validationData.BuildException(); } #endregion IQueryable <AppUserEntity> query = dbContext.Users.AsNoTracking(); #region Filter if (requestModel.Ids?.Any() == true) { query = query.ByIds(requestModel.Ids); } if (requestModel.UserName != null) { query = query.ByUsername(requestModel.UserName); } if (!string.IsNullOrWhiteSpace(requestModel.SearchTerm)) { query = query.BySearchTerm(requestModel.SearchTerm); } if (requestModel.RegisteredFromDate != null) { query = query.CreatedFrom(requestModel.RegisteredFromDate.Value); } if (requestModel.RegisteredToDate != null) { query = query.CreatedTo(requestModel.RegisteredToDate.Value); } #endregion var orgQuery = query; #region Sorting var sortByArr = requestModel.GetSortByArr(); if (!sortByArr.IsNullOrEmpty()) { foreach (var field in sortByArr) { var asc = field[0] == QueryConsts.SortAscPrefix; var fieldName = field.Remove(0, 1); switch (fieldName) { case ListAppUserRequestModel.SortByUsername: { if (asc) { query = query.SequentialOrderBy(o => o.UserName); } else { query = query.SequentialOrderByDesc(o => o.UserName); } } break; default: throw AppValidationException.From(resultLocalizer, ResultCode.InvalidPagingRequest); } } } #endregion if (requestModel.Page > 0) { query = query.Limit(requestModel.Page, requestModel.PageLimit); } #region Projection var projectionArr = requestModel.GetFieldsArr().Select(o => ListAppUserRequestModel.Projections[o]).ToArray(); var projectionStr = string.Join(',', projectionArr); var projectedQuery = query.Select <TModel>( parsingConfig ?? DynamicLinqConsts.DefaultParsingConfig, $"new {typeof(TModel).FullName}({projectionStr})"); #endregion var responseModels = await projectedQuery.ToArrayAsync(); var response = new ListResponseModel <TModel> { List = responseModels, }; if (requestModel.CountTotal) { response.TotalCount = await orgQuery.CountAsync(); } return(response); }
public async Task <IActionResult> GetListAppUser([FromQuery] ListAppUserRequestModel model) { var data = await _identityService.GetListAppUserAsync <ListAppUserModel>(model); return(Success(data)); }