public static PrintingEditionResponseModel Map(PrintingEditionResponseDataModel responseDataModel)
        {
            if (responseDataModel is null)
            {
                return(new PrintingEditionResponseModel());
            }

            var responseFilterModel = new PrintingEditionResponseModel
            {
                TotalCount = responseDataModel.TotalCount
            };

            foreach (var printingEdition in responseDataModel.PrintingEditions)
            {
                var authorModels = new List <AuthorModel>();
                foreach (var author in printingEdition.Authors)
                {
                    var authorModel = _authorModelMapper.Map(author);
                    authorModels.Add(authorModel);
                }
                var printingEditionModel = _printingEditionModelMapper.Map(printingEdition);
                printingEditionModel.Authors = authorModels;
                responseFilterModel.PrintingEditions.Add(printingEditionModel);
            }
            return(responseFilterModel);
        }
        public async Task <PrintingEditionResponseDataModel> FilterAsync(PrintingEditionsRequestDataModel printingEditionRequestDataModel)
        {
            var query = DbSet
                        .Include(printingEdition => printingEdition.AuthorInPrintingEditions)
                        .ThenInclude(authorInPrintingEdition => authorInPrintingEdition.Author)
                        .Where(pe => !pe.IsRemoved && EF.Functions.Like(pe.Title, $"%{printingEditionRequestDataModel.SearchString}%") &&
                               printingEditionRequestDataModel.Types.Contains(pe.Type));
            var totalCount = await query.CountAsync();

            if (printingEditionRequestDataModel.MaxPrice > printingEditionRequestDataModel.MinPrice &&
                printingEditionRequestDataModel.MaxPrice != printingEditionRequestDataModel.MinPrice)
            {
                query = query.Where(pe => pe.Price <= printingEditionRequestDataModel.MaxPrice &&
                                    pe.Price >= printingEditionRequestDataModel.MinPrice);
            }

            query = query
                    .OrderBy("Price", $"{printingEditionRequestDataModel.SortType}")
                    .Skip(printingEditionRequestDataModel.Paging.CurrentPage * printingEditionRequestDataModel.Paging.ItemsCount)
                    .Take(printingEditionRequestDataModel.Paging.ItemsCount);
            foreach (var printingEdition in query)
            {
                var authors = printingEdition.AuthorInPrintingEditions
                              .Select(authorInPrintingEditions => authorInPrintingEditions.Author)
                              .ToList();
                printingEdition.Authors = authors;
            }
            var printingEditions = query.ToList();
            var result           = new PrintingEditionResponseDataModel
            {
                PrintingEditions = printingEditions,
                TotalCount       = totalCount
            };

            return(result);
        }