Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> GetListAppUser([FromQuery] ListAppUserRequestModel model)
        {
            var data = await _identityService.GetListAppUserAsync <ListAppUserModel>(model);

            return(Success(data));
        }