/// <summary> /// Возвращает список объявлений /// </summary> /// <param name="request"></param> /// <returns></returns> public async Task <PaginationResponse <AdvertisementResponse> > Get(AdvertisementsRequest request) { try { // Выбираем объявления var advertisements = _dataContext.Advertisements .Select(a => new AdvertisementResponse { Id = a.Id, Number = a.Number, Text = a.Text, Created = a.Created, ImageUrl = $"{a.ImageUrl}{ImageSizes.Small.ToString()}{a.ImageExtension}", Rating = a.Rating, UserId = a.UserId, UserName = a.User.Name }); // Применяем фильтры if (request?.Filters != null && request.Filters.Count > 0) { request.Filters.ForEach(f => { var expression = GetConditionTemplate(f.Condition, f.FieldName); advertisements = advertisements.Where(expression, f.Value); }); } // Применяем сортировки if (request?.Sorts != null && request.Sorts.Count > 0) { var sort = string.Join(',', request.Sorts.Select(s => GetSort(s.FieldName, s.Desc)).ToList()); advertisements = advertisements.OrderBy(sort); } // Применяем пагинацию var page = request?.Pagination?.Page != null ? request.Pagination.Page : 1; var pageSize = request?.Pagination?.PageSize != null ? request.Pagination.PageSize : 10; var pageRes = advertisements.PageResult(page, pageSize); var result = new PaginationResponse <AdvertisementResponse> { Items = await pageRes.Queryable.ToListAsync(), CurrentPage = pageRes.CurrentPage, PageCount = pageRes.PageCount, PageSize = pageRes.PageSize, RowCount = pageRes.RowCount }; return(result); } catch (Exception ex) { _logger.LogError(ex.Message); throw ex; } }
public async Task <ActionResult <List <AdvertisementResponse> > > Get(AdvertisementsRequest request) { try { var res = await _advService.Get(request); return(new OkObjectResult(res)); } catch (Exception exception) { _logger.LogError(exception.Message); throw exception; } }