docs: #302 endpoint for retrieving the list of saved duplicates of a category poems

This commit is contained in:
Hamid Reza Mohammadi 2022-03-28 11:21:22 +04:30
parent df81656953
commit 333f6f0b68
5 changed files with 183 additions and 0 deletions

View File

@ -2653,6 +2653,26 @@ namespace RMuseum.Controllers
return Ok();
}
/// <summary>
/// list of category saved duplicated poems
/// </summary>
/// <param name="catId"></param>
/// <returns></returns>
[HttpGet]
[Route("duplicates/{catId}")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<GanjoorDuplicateViewModel>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetCategoryDuplicates(int catId)
{
var res =
await _ganjoorService.GetCategoryDuplicates(catId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);
}
/// <summary>
/// readonly mode
/// </summary>

View File

@ -0,0 +1,48 @@
namespace RMuseum.Models.Ganjoor.ViewModels
{
/// <summary>
/// Ganjoor Duplicate View Model
/// </summary>
public class GanjoorDuplicateViewModel
{
/// <summary>
/// Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// Source Poem Id
/// </summary>
public int SrcPoemId { get; set; }
/// <summary>
/// Source Poem cat + parent cats title + title
/// </summary>
public string SrcPoemFullTitle { get; set; }
/// <summary>
/// Source Poem sample: /hafez/ghazal/sh1
/// </summary>
public string SrcPoemFullUrl { get; set; }
/// <summary>
/// Source Poem First Verse
/// </summary>
public string FirstVerse { get; set; }
/// <summary>
/// destination poem id
/// </summary>
public int? DestPoemId { get; set; }
/// <summary>
/// destination Poem cat + parent cats title + title
/// </summary>
public string DestPoemFullTitle { get; set; }
/// <summary>
/// destination Poem sample: /hafez/ghazal/sh1
/// </summary>
public string DestPoemFullUrl { get; set; }
}
}

View File

@ -1641,6 +1641,13 @@
<param name="destCatId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetCategoryDuplicates(System.Int32)">
<summary>
list of category saved duplicated poems
</summary>
<param name="catId"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Controllers.GanjoorController.ReadOnlyMode">
<summary>
readonly mode
@ -7789,6 +7796,51 @@
total paragraphs
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel">
<summary>
Ganjoor Duplicate View Model
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.Id">
<summary>
Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.SrcPoemId">
<summary>
Source Poem Id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.SrcPoemFullTitle">
<summary>
Source Poem cat + parent cats title + title
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.SrcPoemFullUrl">
<summary>
Source Poem sample: /hafez/ghazal/sh1
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.FirstVerse">
<summary>
Source Poem First Verse
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.DestPoemId">
<summary>
destination poem id
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.DestPoemFullTitle">
<summary>
destination Poem cat + parent cats title + title
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorDuplicateViewModel.DestPoemFullUrl">
<summary>
destination Poem sample: /hafez/ghazal/sh1
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.GanjooRhymeAnalysisResult">
<summary>
Rhyme Analysis Result
@ -11352,6 +11404,13 @@
<param name="destCatId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.GetCategoryDuplicates(System.Int32)">
<summary>
list of category saved duplicated poems
</summary>
<param name="catId"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IGanjoorTranslationService">
<summary>
translation service implementation
@ -13607,6 +13666,13 @@
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.GanjoorService.GetCategoryDuplicates(System.Int32)">
<summary>
list of category saved duplicated poems
</summary>
<param name="catId"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Services.Implementation.GanjoorService.AggressiveCacheEnabled">
<summary>
aggressive cache

View File

@ -862,5 +862,12 @@ namespace RMuseum.Services
/// <param name="destCatId"></param>
/// <returns></returns>
RServiceResult<bool> StartFindingCategoryPoemsDuplicates(int srcCatId, int destCatId);
/// <summary>
/// list of category saved duplicated poems
/// </summary>
/// <param name="catId"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorDuplicateViewModel[]>> GetCategoryDuplicates(int catId);
}
}

View File

@ -3222,6 +3222,48 @@ namespace RMuseum.Services.Implementation
}
}
/// <summary>
/// list of category saved duplicated poems
/// </summary>
/// <param name="catId"></param>
/// <returns></returns>
public async Task<RServiceResult<GanjoorDuplicateViewModel[]>> GetCategoryDuplicates(int catId)
{
try
{
List<GanjoorDuplicateViewModel> dups = new List<GanjoorDuplicateViewModel>();
var poems = await _context.GanjoorPoems.AsNoTracking().Where(p => p.CatId == catId).OrderBy(p => p.Id).ToListAsync();
foreach (var poem in poems)
{
var firstVerse = await _context.GanjoorVerses.AsNoTracking().Where(v => v.PoemId == poem.Id).OrderBy(v => v.VOrder).FirstAsync();
var dupPoem = await _context.GanjoorDuplicates.AsNoTracking().Where(d => d.SrcCatId == catId && d.SrcPoemId == poem.Id).FirstOrDefaultAsync();
GanjoorPoem destPoem = dupPoem == null || dupPoem.DestPoemId == null ? null :
await _context.GanjoorPoems.AsNoTracking().Where(p => p.Id == dupPoem.DestPoemId).SingleAsync();
dups.Add
(
new GanjoorDuplicateViewModel()
{
Id = dupPoem == null ? 0 : dupPoem.Id,
SrcPoemId = poem.Id,
SrcPoemFullTitle = poem.FullTitle,
SrcPoemFullUrl = poem.FullUrl,
FirstVerse = firstVerse.Text,
DestPoemId = dupPoem == null ? null : dupPoem.DestPoemId,
DestPoemFullTitle = dupPoem == null ? "" : destPoem.FullTitle,
DestPoemFullUrl = dupPoem == null ? "" : destPoem.FullUrl
}
);
}
return new RServiceResult<GanjoorDuplicateViewModel[]>(dups.ToArray());
}
catch (Exception exp)
{
return new RServiceResult<GanjoorDuplicateViewModel[]>(null, exp.ToString());
}
}
/// <summary>
/// aggressive cache
/// </summary>