From 534d2f9e3be72d039acb4d79318cdb1bd45befbf Mon Sep 17 00:00:00 2001 From: Hamid Reza Mohammadi Date: Sun, 13 Aug 2023 16:40:12 +0330 Subject: [PATCH] #399 improving api performance --- RMuseum/Controllers/PDFLibraryController.cs | 20 +++++++------ RMuseum/RMuseum.xml | 28 +++++++++++-------- RMuseum/Services/IPDFLibraryService.cs | 7 +++-- .../Implementation/PDFLibraryService.cs | 25 +++++++++++++---- 4 files changed, 50 insertions(+), 30 deletions(-) diff --git a/RMuseum/Controllers/PDFLibraryController.cs b/RMuseum/Controllers/PDFLibraryController.cs index 2c9d63f5..30319e4c 100644 --- a/RMuseum/Controllers/PDFLibraryController.cs +++ b/RMuseum/Controllers/PDFLibraryController.cs @@ -118,15 +118,16 @@ namespace RMuseum.Controllers /// secure get a pdf book /// /// - /// - /// + /// + /// + /// /// [HttpGet("secure/{id}")] [Authorize] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PDFBook))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.NotFound)] - public async Task GetUserVisiblePDFBookAsync(int id, bool omitBookText = true, bool omitPageText = false) + public async Task GetUserVisiblePDFBookAsync(int id, bool includePages = false, bool includeBookText = false, bool includePageText = false) { RServiceResult v = await _GetUserVisiblePDFBooksStatusSetAsync ( @@ -139,7 +140,7 @@ namespace RMuseum.Controllers RServiceResult bookRes = null; if (visibleItems.Length == 1 && visibleItems[0] == PublishStatus.Published) { - bookRes = await _pdfService.GetPDFBookByIdAsync(id, new PublishStatus[] { PublishStatus.Published }, omitBookText, omitPageText); + bookRes = await _pdfService.GetPDFBookByIdAsync(id, new PublishStatus[] { PublishStatus.Published }, includePages, includeBookText, includePageText); if (!string.IsNullOrEmpty(bookRes.ExceptionString)) { return BadRequest(bookRes.ExceptionString); @@ -149,7 +150,7 @@ namespace RMuseum.Controllers } if (bookRes == null) { - bookRes = await _pdfService.GetPDFBookByIdAsync(id, visibleItems, omitBookText, omitPageText); + bookRes = await _pdfService.GetPDFBookByIdAsync(id, visibleItems, includePages, includeBookText, includePageText); } if (!string.IsNullOrEmpty(bookRes.ExceptionString)) @@ -209,17 +210,18 @@ namespace RMuseum.Controllers /// get published PDF Book by id /// /// - /// - /// + /// + /// + /// /// [HttpGet("{id}")] [AllowAnonymous] [ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PDFBook))] [ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))] [ProducesResponseType((int)HttpStatusCode.NotFound)] - public async Task GetPDFBookByIdAsync(int id, bool omitBookText = true, bool omitPageText = false) + public async Task GetPDFBookByIdAsync(int id, bool includePages = false, bool includeBookText = false, bool includePageText = false) { - var bookRes = await _pdfService.GetPDFBookByIdAsync(id, new PublishStatus[] { PublishStatus.Published }, omitBookText, omitPageText); + var bookRes = await _pdfService.GetPDFBookByIdAsync(id, new PublishStatus[] { PublishStatus.Published }, includePages, includeBookText, includePageText); if (!string.IsNullOrEmpty(bookRes.ExceptionString)) { diff --git a/RMuseum/RMuseum.xml b/RMuseum/RMuseum.xml index 5c9b88db..f9603a5e 100644 --- a/RMuseum/RMuseum.xml +++ b/RMuseum/RMuseum.xml @@ -2394,22 +2394,24 @@ - + secure get a pdf book - - + + + - + get published PDF Book by id - - + + + @@ -18445,14 +18447,15 @@ - + get pdf book by id - - + + + @@ -19711,14 +19714,15 @@ - + get pdf book by id - - + + + diff --git a/RMuseum/Services/IPDFLibraryService.cs b/RMuseum/Services/IPDFLibraryService.cs index 75f1796d..5a91119b 100644 --- a/RMuseum/Services/IPDFLibraryService.cs +++ b/RMuseum/Services/IPDFLibraryService.cs @@ -25,10 +25,11 @@ namespace RMuseum.Services /// /// /// - /// - /// + /// + /// + /// /// - Task> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool omitBookText, bool omitPageText); + Task> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool includePages, bool includeBookText, bool includePageText); /// /// get all pdfbooks (including CoverImage info but not pages or tagibutes info) diff --git a/RMuseum/Services/Implementation/PDFLibraryService.cs b/RMuseum/Services/Implementation/PDFLibraryService.cs index cf9297bb..577ce029 100644 --- a/RMuseum/Services/Implementation/PDFLibraryService.cs +++ b/RMuseum/Services/Implementation/PDFLibraryService.cs @@ -49,14 +49,17 @@ namespace RMuseum.Services.Implementation /// /// /// - /// - /// + /// + /// + /// /// - public async Task> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool omitBookText, bool omitPageText) + public async Task> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool includePages, bool includeBookText, bool includePageText) { try { - var pdfBook = await _context.PDFBooks.AsNoTracking() + var pdfBook = + includePages ? + await _context.PDFBooks.AsNoTracking() .Include(b => b.Book) .Include(b => b.PDFFile) .Include(b => b.MultiVolumePDFCollection) @@ -65,14 +68,24 @@ namespace RMuseum.Services.Implementation .Include(b => b.Tags).ThenInclude(t => t.RTag) .Include(b => b.Pages) .Where(b => statusArray.Contains(b.Status) && b.Id == id) + .SingleOrDefaultAsync() + : + await _context.PDFBooks.AsNoTracking() + .Include(b => b.Book) + .Include(b => b.PDFFile) + .Include(b => b.MultiVolumePDFCollection) + .Include(b => b.PDFSource) + .Include(b => b.Contributers).ThenInclude(c => c.Author) + .Include(b => b.Tags).ThenInclude(t => t.RTag) + .Where(b => statusArray.Contains(b.Status) && b.Id == id) .SingleOrDefaultAsync(); if (pdfBook != null) { - if (omitBookText) + if (!includeBookText) { pdfBook.BookText = ""; } - if (omitPageText) + if (!includePageText && pdfBook.Pages != null) { foreach (var page in pdfBook.Pages) {