#399 improving api performance

This commit is contained in:
Hamid Reza Mohammadi 2023-08-13 16:40:12 +03:30
parent 8086e2ff68
commit 534d2f9e3b
4 changed files with 50 additions and 30 deletions

View File

@ -118,15 +118,16 @@ namespace RMuseum.Controllers
/// secure get a pdf book
/// </summary>
/// <param name="id"></param>
/// <param name="omitBookText"></param>
/// <param name="omitPageText"></param>
/// <param name="includePages"></param>
/// <param name="includeBookText"></param>
/// <param name="includePageText"></param>
/// <returns></returns>
[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<IActionResult> GetUserVisiblePDFBookAsync(int id, bool omitBookText = true, bool omitPageText = false)
public async Task<IActionResult> GetUserVisiblePDFBookAsync(int id, bool includePages = false, bool includeBookText = false, bool includePageText = false)
{
RServiceResult<PublishStatus[]> v = await _GetUserVisiblePDFBooksStatusSetAsync
(
@ -139,7 +140,7 @@ namespace RMuseum.Controllers
RServiceResult<PDFBook> 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
/// </summary>
/// <param name="id"></param>
/// <param name="omitBookText"></param>
/// <param name="omitPageText"></param>
/// <param name="includePages"></param>
/// <param name="includeBookText"></param>
/// <param name="includePageText"></param>
/// <returns></returns>
[HttpGet("{id}")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(PDFBook))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetPDFBookByIdAsync(int id, bool omitBookText = true, bool omitPageText = false)
public async Task<IActionResult> 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))
{

View File

@ -2394,22 +2394,24 @@
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.PDFLibraryController.GetUserVisiblePDFBookAsync(System.Int32,System.Boolean,System.Boolean)">
<member name="M:RMuseum.Controllers.PDFLibraryController.GetUserVisiblePDFBookAsync(System.Int32,System.Boolean,System.Boolean,System.Boolean)">
<summary>
secure get a pdf book
</summary>
<param name="id"></param>
<param name="omitBookText"></param>
<param name="omitPageText"></param>
<param name="includePages"></param>
<param name="includeBookText"></param>
<param name="includePageText"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.PDFLibraryController.GetPDFBookByIdAsync(System.Int32,System.Boolean,System.Boolean)">
<member name="M:RMuseum.Controllers.PDFLibraryController.GetPDFBookByIdAsync(System.Int32,System.Boolean,System.Boolean,System.Boolean)">
<summary>
get published PDF Book by id
</summary>
<param name="id"></param>
<param name="omitBookText"></param>
<param name="omitPageText"></param>
<param name="includePages"></param>
<param name="includeBookText"></param>
<param name="includePageText"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.PDFLibraryController.StartImportingLocalPDFAsync(RMuseum.Models.PDFLibrary.ViewModels.NewPDFBookViewModel)">
@ -18445,14 +18447,15 @@
<param name="srcUrl"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.PDFLibraryService.GetPDFBookByIdAsync(System.Int32,RMuseum.Models.Artifact.PublishStatus[],System.Boolean,System.Boolean)">
<member name="M:RMuseum.Services.Implementation.PDFLibraryService.GetPDFBookByIdAsync(System.Int32,RMuseum.Models.Artifact.PublishStatus[],System.Boolean,System.Boolean,System.Boolean)">
<summary>
get pdf book by id
</summary>
<param name="id"></param>
<param name="statusArray"></param>
<param name="omitBookText"></param>
<param name="omitPageText"></param>
<param name="includePages"></param>
<param name="includeBookText"></param>
<param name="includePageText"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.PDFLibraryService.GetPDFPageAsync(System.Int32,System.Int32)">
@ -19711,14 +19714,15 @@
<param name="srcUrl"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IPDFLibraryService.GetPDFBookByIdAsync(System.Int32,RMuseum.Models.Artifact.PublishStatus[],System.Boolean,System.Boolean)">
<member name="M:RMuseum.Services.IPDFLibraryService.GetPDFBookByIdAsync(System.Int32,RMuseum.Models.Artifact.PublishStatus[],System.Boolean,System.Boolean,System.Boolean)">
<summary>
get pdf book by id
</summary>
<param name="id"></param>
<param name="statusArray"></param>
<param name="omitBookText"></param>
<param name="omitPageText"></param>
<param name="includePages"></param>
<param name="includeBookText"></param>
<param name="includePageText"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IPDFLibraryService.GetAllPDFBooksAsync(RSecurityBackend.Models.Generic.PagingParameterModel,RMuseum.Models.Artifact.PublishStatus[])">

View File

@ -25,10 +25,11 @@ namespace RMuseum.Services
/// </summary>
/// <param name="id"></param>
/// <param name="statusArray"></param>
/// <param name="omitBookText"></param>
/// <param name="omitPageText"></param>
/// <param name="includePages"></param>
/// <param name="includeBookText"></param>
/// <param name="includePageText"></param>
/// <returns></returns>
Task<RServiceResult<PDFBook>> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool omitBookText, bool omitPageText);
Task<RServiceResult<PDFBook>> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool includePages, bool includeBookText, bool includePageText);
/// <summary>
/// get all pdfbooks (including CoverImage info but not pages or tagibutes info)

View File

@ -49,14 +49,17 @@ namespace RMuseum.Services.Implementation
/// </summary>
/// <param name="id"></param>
/// <param name="statusArray"></param>
/// <param name="omitBookText"></param>
/// <param name="omitPageText"></param>
/// <param name="includePages"></param>
/// <param name="includeBookText"></param>
/// <param name="includePageText"></param>
/// <returns></returns>
public async Task<RServiceResult<PDFBook>> GetPDFBookByIdAsync(int id, PublishStatus[] statusArray, bool omitBookText, bool omitPageText)
public async Task<RServiceResult<PDFBook>> 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)
{