Example #1
0
 public static PageSummaryView Map(this PageSummaryModel source)
 => new PageSummaryView
 {
     Status     = source.Status.ToDescription(),
     Count      = source.Count,
     Percentage = source.Percentage
 };
Example #2
0
        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);
            }
        }