Ejemplo n.º 1
0
        /// <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;
            }
        }