예제 #1
0
        public async Task <GetListResponseModel <TModel> > GetListAppUsersAsync <TModel>(
            GetListAppUsersRequestModel requestModel, ParsingConfig parsingConfig = null)
        {
            #region Validation
            var userInfo       = BusinessContext.Current?.PrincipalInfo;
            var validationData = new ValidationData();

            // validation logic here

            if (!validationData.IsValid)
            {
                throw validationData.BuildException();
            }
            #endregion

            var queryModel             = requestModel.MapTo <DynamicQueryAppUserModel>();
            IQueryable <AppUser> query = dbContext.Users.AsNoTracking();

            #region Filter
            if (queryModel.Id != null)
            {
                query = query.ById(queryModel.Id);
            }

            if (queryModel.UserName != null)
            {
                query = query.ByUsername(queryModel.UserName);
            }

            if (queryModel.SearchTerm != null)
            {
                query = query.BySearchTerm(queryModel.SearchTerm);
            }
            #endregion

            var orgQuery = query;

            #region Sorting
            if (!queryModel.SortBy.IsNullOrEmpty())
            {
                foreach (var field in queryModel.SortBy)
                {
                    var asc       = field[0] == QueryConsts.SortAscPrefix;
                    var fieldName = field.Remove(0, 1);

                    switch (fieldName)
                    {
                    case DynamicQueryAppUserModel.SortByUsername:
                    {
                        if (asc)
                        {
                            query = query.SequentialOrderBy(o => o.UserName);
                        }
                        else
                        {
                            query = query.SequentialOrderByDesc(o => o.UserName);
                        }
                    }
                    break;

                    default:
                        throw AppValidationException.From(ResultCode.InvalidPagingRequest);
                    }
                }
            }
            #endregion

            if (queryModel.Page > 0)
            {
                query = query.Limit(queryModel.Page, queryModel.PageLimit);
            }

            #region Projection
            var projectionArr = queryModel.Fields.Select(o => DynamicQueryAppUserModel.Projections[o]).ToArray();
            var projectionStr = string.Join(',', projectionArr);

            var projectedQuery = query.Select <TModel>(
                parsingConfig ?? DynamicLinqEntityTypeProvider.DefaultParsingConfig,
                $"new {typeof(TModel).FullName}({projectionStr})");
            #endregion

            var responseModels = await projectedQuery.ToArrayAsync();

            var response = new GetListResponseModel <TModel>
            {
                List = responseModels,
            };

            if (queryModel.CountTotal)
            {
                response.TotalCount = await orgQuery.CountAsync();
            }

            return(response);
        }
예제 #2
0
        public async Task <IActionResult> GetListAppUser([FromQuery][QueryObject] GetListAppUsersRequestModel model)
        {
            var data = await _identityService.GetListAppUsersAsync <GetListAppUsersResponseModel>(model);

            return(Success(data));
        }