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