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 } )); }