Esempio n. 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);
        }
Esempio n. 2
0
        public static GetListResponseModel GetItemsForList(GetListRequestModel requestModel)
        {
            var   distanceFrom = 0;
            var   distanceTo   = 1000000;
            float rating       = 0;

            if (!string.IsNullOrEmpty(requestModel.DistanceFrom))
            {
                distanceFrom = Convert.ToInt16(requestModel.DistanceFrom);
            }
            if (!string.IsNullOrEmpty(requestModel.DistanceTo))
            {
                distanceTo = Convert.ToInt16(requestModel.DistanceTo);
            }
            if (!string.IsNullOrEmpty(requestModel.Rating))
            {
                rating = (float)Convert.ToDouble(requestModel.Rating);
            }

            DbGeography   userLoc = null;
            List <string> latlng  = new List <string>();

            if (!string.IsNullOrEmpty(requestModel.Cords) && requestModel.Cords != "")
            {
                latlng = requestModel.Cords.Split('_').ToList();
                if (latlng.Count == 2)
                {
                    userLoc = CommonService.ConvertLatLonToDbGeography(latlng[1], latlng[0]); // lat _ lng
                }
            }
            using (var dbContext = new DeliversEntities())
            {
                var allCats = GetCategories(true);
                if ((requestModel.IsWeb && (requestModel.TypeList == null || requestModel.TypeList.Count() == 0)) ||
                    (!requestModel.IsWeb && (requestModel.Type == -1)))
                {
                    requestModel.TypeList = new List <int>();
                    requestModel.TypeList = allCats.Select(c => (int)c.CatId).ToList();
                }
                requestModel.CurrentPage--;
                var response = new GetListResponseModel();
                var newList  = new List <ListItemLocal>();

                string searchText = null;
                if (!string.IsNullOrEmpty(requestModel.SearchTerm))
                {
                    searchText = requestModel.SearchTerm.ToLower();
                }

                var list = dbContext.ListItems.Where(item => item.Status &&
                                                     ((requestModel.IsWeb && requestModel.TypeList.Any(o => o == item.Type)) ||
                                                      (!requestModel.IsWeb && requestModel.Type == -1 && requestModel.TypeList.Any(o => o == item.Type)) ||
                                                      (item.Type == requestModel.Type && !requestModel.IsWeb))

                                                     &&
                                                     (string.IsNullOrEmpty(searchText) ||
                                                      item.Name.ToLower().Contains(searchText) ||
                                                      item.Address.ToLower().Contains(searchText) ||
                                                      item.Description.ToLower().Contains(searchText) ||
                                                      (item.ItemDetails.Any(det => det.Name.ToLower().Contains(searchText)))
                                                     )).ToList();
                if (list.Any())
                {
                    var finals = list.Select(obj => obj.MapListItem()).ToList();
                    foreach (var rest in finals)
                    {
                        var restRate = (float)Convert.ToDouble(rest.Rating);
                        var dist     = CommonService.GetDistance((double)userLoc.Latitude, (double)userLoc.Longitude, Convert.ToDouble(rest.LocationObj.Latitude), Convert.ToDouble(rest.LocationObj.Longitude));
                        if ((int)dist >= distanceFrom && (int)dist <= distanceTo && restRate >= rating)
                        {
                            var disst = Math.Round((double)dist, 2);
                            rest.LocationObj = null;
                            rest.Distance    = disst;
                            rest.Name        = rest.Name;
                            rest.TypeName    = allCats.FirstOrDefault(c => c.CatId == rest.Type).Name;
                            newList.Add(rest);
                        }
                    }
                    newList = newList.OrderBy(obj => obj.Distance).ToList();
                    var take = newList.Skip(requestModel.CurrentPage * requestModel.ItemsPerPage).
                               Take(requestModel.ItemsPerPage).ToList();
                    response.Items = take;
                }
                requestModel.CurrentPage++;
                response.ItemsPerPage = requestModel.ItemsPerPage;
                response.CurrentPage  = requestModel.CurrentPage;
                response.TotalItems   = newList.Count;
                return(response);
            }
        }