Exemplo n.º 1
0
        public DTO.Messages.Wrapper GetAll([FromBody] DTO.Messages.SearchPage Search = null)
        {
            var Result = AuthorizeResponse(new HashSet <string> {
                "Administrator"
            });

            if (Search == null)
            {
                Search = new DTO.Messages.SearchPage();
            }
            else
            {
                var Max = (Search.MaxPrice > Search.MinPrice) ? Search.MaxPrice : Search.MinPrice;
                var Min = (Search.MaxPrice < Search.MinPrice) ? Search.MaxPrice : Search.MinPrice;

                Search.MaxPrice = Max;
                Search.MinPrice = Min;
            }
            IQueryable <DTO.Databases.Product> Query = null;

            if (string.IsNullOrWhiteSpace(Search.SearchTerm))
            {
                Query = MongoItems.QueryableCollection;
            }
            else
            {
                var SearchKey = new DTO.Projection.Search
                {
                    SearchTerm    = Search.SearchTerm,
                    Categories    = Search.Categories,
                    SubCategories = Search.SubCategories
                };

                var Cached = RedisItems.GetList(SearchKey);
                if (Cached == null || Cached.Count() == 0)
                {
                    Cached = MongoItems.SearchThru(Search, false);
                    RedisItems.SaveList(Cached, SearchKey);
                    Query = Cached.AsQueryable();
                }
                else
                {
                    Query = Cached.AsQueryable();
                }

                var Offset = Query.Count() < (Search.Page + 1) * Search.PageLimit ? Query.Count() : (Search.Page + 1) * Search.PageLimit;
                Offset = (Offset - Search.PageLimit < 0) ? 0 : Offset - Search.PageLimit;
                var Taken = Query.Count() - Offset;

                Query       = Query.Skip(Offset).Take(Taken);
                Result.Data = Query;

                if (Query.Count() == 0)
                {
                    Result.Code   = 404;
                    Result.Status = "Not Found";
                }
            }
            return(Result);
        }
Exemplo n.º 2
0
        public IEnumerable <DTO.Databases.Product> SearchThru(DTO.Messages.SearchPage Search, bool TimeBased = true)
        {
            var Cached = Collection
                         .FindSync(Builders <DTO.Databases.Product> .Filter.Text(Search.SearchTerm))
                         .ToList();

            var Query = Cached.AsQueryable();

            if (Search.MaxPrice < long.MaxValue)
            {
                Query.Where(x => x.Price <= Search.MaxPrice);
            }
            if (Search.MinPrice > 0)
            {
                Query.Where(x => x.Price >= Search.MinPrice);
            }
            if (Search.Categories.Count > 0)
            {
                Query = Query.Where(x => Search.Categories.Intersect(x.Categories).Count() > 0);
            }
            if (Search.SubCategories.Count > 0)
            {
                Query = Query.Where(x => Search.SubCategories.Intersect(x.SubCategories).Count() > 0);
            }
            if (TimeBased)
            {
                Query.Where(x => x.Scored() > 0);
            }

            return(Query);
        }