public static PageSummaryView Map(this PageSummaryModel source) => new PageSummaryView { Status = source.Status.ToDescription(), Count = source.Count, Percentage = source.Percentage };
public async Task <IEnumerable <BookPageSummaryModel> > GetBookPageSummary(int libraryId, IEnumerable <int> bookIds, CancellationToken cancellationToken) { using (var connection = _connectionProvider.GetConnection()) { var bookSummaries = new Dictionary <int, BookPageSummaryModel>(); const string sql = @"Select bp.BookId, bp.[Status], Count(*), (Count(bp.Status)* 100 / (Select Count(*) From BookPage WHERE BookPage.BookId = bp.BookId)) as Percentage FROM BookPage bp INNER Join Book b ON b.id = bp.BookId Where b.LibraryId = @LibraryId AND b.Id IN @BookIds AND b.Status <> 0 GROUP By bp.BookId, bp.[Status]"; var command = new CommandDefinition(sql, new { LibraryId = libraryId, BookIds = bookIds }, cancellationToken: cancellationToken); var results = await connection.QueryAsync <(int BookId, EditingStatus Status, int Count, decimal Percentage)>(command); foreach (var result in results) { var pageSummary = new PageSummaryModel { Status = result.Status, Count = result.Count, Percentage = result.Percentage }; if (!bookSummaries.TryGetValue(result.BookId, out BookPageSummaryModel bookSummary)) { bookSummaries.Add(result.BookId, new BookPageSummaryModel { BookId = result.BookId, Statuses = new List <PageSummaryModel> { pageSummary } }); } else { bookSummary.Statuses.Add(pageSummary); } } return(bookSummaries.Values); } }