docs: #302 UI for finding duplicates

This commit is contained in:
Hamid Reza Mohammadi 2022-03-29 10:51:40 +04:30
parent 53520d2976
commit e6ffd70d6b
4 changed files with 82 additions and 30 deletions

View File

@ -21,19 +21,31 @@ else
</tr>
@foreach (var poem in Model.Poems)
{
<tr>
<td>
<a href="@poem.SrcPoemFullUrl">@poem.SrcPoemFullTitle</a>
</td>
<td>
@if(!string.IsNullOrEmpty(poem.DestPoemFullUrl))
{
<tr>
<td>
<a href="@poem.SrcPoemFullUrl">@poem.SrcPoemFullTitle</a>
</td>
<td>
@if (!string.IsNullOrEmpty(poem.DestPoemFullUrl))
{
<a href="@poem.DestPoemFullUrl">@poem.DestPoemFullTitle</a>
}
</td>
</tr>
}
</tr>
}
</table>
<table>
<tr>
<td>مشابه‌یابی در بخش:</td>
<td>
<form method="post" action="/Admin/CatTrans?Handler=FindDuplicates&id=@Model.CatId">
<input asp-for="DestCatId" />
<input type="submit" value="شروع مشابه‌یابی" />
</form>
</td>
</tr>
</table>
}

View File

@ -27,6 +27,18 @@ namespace GanjooRazor.Areas.Admin.Pages
/// </summary>
public GanjoorDuplicateViewModel[] Poems { get; set; }
/// <summary>
/// cat id
/// </summary>
public int CatId { get; set; }
/// <summary>
/// dest cat Id
/// </summary>
[BindProperty]
public int DestCatId { get; set; }
private async Task<bool> _GetCatDuplicatesAsync()
{
if (string.IsNullOrEmpty(Request.Query["id"]))
@ -34,12 +46,12 @@ namespace GanjooRazor.Areas.Admin.Pages
LastMessage = "شناسهٔ بخش مشخص نیست.";
return false;
}
var id = Request.Query["id"];
CatId = int.Parse(Request.Query["id"]);
using (HttpClient secureClient = new HttpClient())
{
if(await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
HttpResponseMessage response = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/duplicates/{id}");
HttpResponseMessage response = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/duplicates/{CatId}");
if (!response.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await response.Content.ReadAsStringAsync());
@ -67,5 +79,33 @@ namespace GanjooRazor.Areas.Admin.Pages
return Page();
}
public async Task<IActionResult> OnPostFindDuplicatesAsync()
{
CatId = int.Parse(Request.Query["id"]);
using (HttpClient secureClient = new HttpClient())
{
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
{
HttpResponseMessage response = await secureClient.PostAsync($"{APIRoot.Url}/api/ganjoor/duplicates/{CatId}/{DestCatId}", null);
if (!response.IsSuccessStatusCode)
{
LastMessage = JsonConvert.DeserializeObject<string>(await response.Content.ReadAsStringAsync());
return Page();
}
else
{
LastMessage = "فرایند شروع شد.";
return Page();
}
}
else
{
LastMessage = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
return Page();
}
}
}
}
}

View File

@ -1,14 +1,9 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using RMuseum.Models.Ganjoor.ViewModels;
using RMuseum.Models.GanjoorAudio.ViewModels;
namespace GanjooRazor.Pages
{

View File

@ -197,21 +197,26 @@ namespace RMuseum.Services.Implementation
if (found) continue;
foreach (var probable in targetPoems)
{
var meVerse = await context.GanjoorVerses.AsNoTracking().Where(p => p.PoemId == probable.Id).OrderBy(v => v.VOrder).FirstAsync();
if (_AreSimilar(firstVerse.Text, meVerse.Text, false))
var targetVerses = await context.GanjoorVerses.AsNoTracking().Where(p => p.PoemId == probable.Id).OrderBy(v => v.VOrder).ToListAsync();
foreach (var targetVerse in targetVerses)
{
context.GanjoorDuplicates.Add
(
new GanjoorDuplicate()
{
SrcCatId = srcCatId,
SrcPoemId = poem.Id,
DestPoemId = probable.Id
}
);
await context.SaveChangesAsync();
break;
if (_AreSimilar(firstVerse.Text, targetVerse.Text, false))
{
context.GanjoorDuplicates.Add
(
new GanjoorDuplicate()
{
SrcCatId = srcCatId,
SrcPoemId = poem.Id,
DestPoemId = probable.Id
}
);
await context.SaveChangesAsync();
found = true;
break;
}
}
if (found) break;
}
}
return new RServiceResult<bool>(true);