Exemple #1
0
        public IHttpActionResult GetAds([FromUri] AdminGetAdsBindingModel model)
        {
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            var advertisements = this.ads.All()
                                 .Include(c => c.Category)
                                 .Include(t => t.Town);

            if (model.CategoryId.HasValue)
            {
                advertisements = advertisements.Where(ad => ad.CategoryId == model.CategoryId);
            }

            if (model.TownId.HasValue)
            {
                advertisements = advertisements.Where(ad => ad.TownId == model.TownId);
            }

            return(this.Ok());
        }
        public IHttpActionResult GetAds([FromUri] AdminGetAdsBindingModel model)
        {
            //if (model == null)
            //{
            //    // Sometimes the model is null, so we create an empty model
            //    model = new AdminGetAdsBindingModel();
            //}

            // Validate the input parameters
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            // Select ads by given status, category and town
            var ads = this.Data.Ads.All()
                      .Include(ad => ad.Category)
                      .Include(ad => ad.Town)
                      .Include(ad => ad.Owner);

            if (model.Status.HasValue)
            {
                ads = ads.Where(ad => ad.Status == model.Status.Value);
            }
            if (model.CategoryId.HasValue)
            {
                ads = ads.Where(ad => ad.CategoryId == model.CategoryId.Value);
            }
            if (model.TownId.HasValue)
            {
                ads = ads.Where(ad => ad.TownId == model.TownId.Value);
            }
            ads = ads.OrderByDescending(ad => ad.Date).ThenBy(ad => ad.Id);

            // Find the requested page (by given start page and page size)
            int pageSize = Settings.Default.DefaultPageSize;

            if (model.PageSize.HasValue)
            {
                pageSize = model.PageSize.Value;
            }
            var numPages = (ads.Count() + pageSize - 1) / pageSize;

            if (model.StartPage.HasValue)
            {
                ads = ads.Skip(pageSize * (model.StartPage.Value - 1));
            }
            ads = ads.Take(pageSize);

            // Select the columns to be returned
            var adsToReturn = ads.ToList().Select(ad => new
            {
                id            = ad.Id,
                title         = ad.Title,
                text          = ad.Text,
                date          = ad.Date.ToString("o"),
                imageDataUrl  = ad.ImageDataURL,
                ownerUsername = ad.Owner.UserName,
                ownerName     = ad.Owner.Name,
                ownerEmail    = ad.Owner.Email,
                ownerPhone    = ad.Owner.PhoneNumber,
                categoryId    = ad.CategoryId,
                categoryName  = ad.Category.Name,
                townId        = ad.TownId,
                townName      = ad.Town.Name,
                status        = ad.Status.ToString(),
            });

            return(this.Ok(
                       new
            {
                numPages,
                ads = adsToReturn
            }
                       ));
        }
        public IHttpActionResult GetAds([FromUri] AdminGetAdsBindingModel model)
        {
            if (model == null)
            {
                // When no parameters are passed, the model is null, so we create an empty model
                model = new AdminGetAdsBindingModel();
            }

            // Validate the input parameters
            if (!ModelState.IsValid)
            {
                return(this.BadRequest(this.ModelState));
            }

            // Select ads by given status, category and town (apply filtering)
            var ads = this.Data.Ads.All()
                      .Include(ad => ad.Category)
                      .Include(ad => ad.Town)
                      .Include(ad => ad.Owner);

            if (model.Status.HasValue)
            {
                ads = ads.Where(ad => ad.Status == model.Status.Value);
            }
            if (model.CategoryId.HasValue)
            {
                ads = ads.Where(ad => ad.CategoryId == model.CategoryId.Value);
            }
            if (model.TownId.HasValue)
            {
                ads = ads.Where(ad => ad.TownId == model.TownId.Value);
            }

            // Apply sorting by the specified column / expression (prefix '-' for descending)
            if (model.SortBy != null)
            {
                try
                {
                    // Apply custom sorting order by the specified column / expression
                    if (model.SortBy.StartsWith("-"))
                    {
                        ads = ads.OrderByDescending(model.SortBy.Substring(1)).ThenBy(ad => ad.Id);
                    }
                    else
                    {
                        ads = ads.OrderBy(model.SortBy).ThenBy(ad => ad.Id);
                    }
                }
                catch (Exception)
                {
                    return(this.BadRequest("Invalid sorting expression: " + model.SortBy));
                }
            }
            else
            {
                // Apply the default sorting order: by date descending
                ads = ads.OrderByDescending(ad => ad.Date).ThenBy(ad => ad.Id);
            }

            // Apply paging: find the requested page (by given start page and page size)
            int pageSize = Settings.Default.DefaultPageSize;

            if (model.PageSize.HasValue)
            {
                pageSize = model.PageSize.Value;
            }
            var numItems = ads.Count();
            var numPages = (numItems + pageSize - 1) / pageSize;

            if (model.StartPage.HasValue)
            {
                ads = ads.Skip(pageSize * (model.StartPage.Value - 1));
            }
            ads = ads.Take(pageSize);

            // Select the columns to be returned
            var adsToReturn = ads.ToList().Select(ad => new
            {
                id            = ad.Id,
                title         = ad.Title,
                text          = ad.Text,
                date          = ad.Date.ToString("o"),
                imageDataUrl  = ad.ImageDataURL,
                ownerUsername = ad.Owner.UserName,
                ownerName     = ad.Owner.Name,
                ownerEmail    = ad.Owner.Email,
                ownerPhone    = ad.Owner.PhoneNumber,
                categoryId    = ad.CategoryId,
                categoryName  = (ad.Category != null) ? ad.Category.Name : null,
                townId        = ad.TownId,
                townName      = (ad.Town != null) ? ad.Town.Name : null,
                status        = ad.Status.ToString(),
            });

            return(this.Ok(
                       new
            {
                numItems,
                numPages,
                ads = adsToReturn
            }
                       ));
        }