SearchVersesByQuery service added

This commit is contained in:
Iman Abidi 2021-02-21 18:00:27 +01:00
parent e57f0681e2
commit 47a3f45187
5 changed files with 144 additions and 1 deletions

View File

@ -601,6 +601,29 @@ namespace RMuseum.Controllers
return BadRequest(res.ExceptionString);
}
/// <summary>
/// Search Verses By query
/// </summary>
/// <param name="query"></param>
/// <param name="poetId"></param>
/// <returns></returns>
[HttpGet]
[Route("verse/search")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorSearchVerseViewModel[]))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> SearchVersesByQuery(string query, int poetId = 0)
{
RServiceResult<GanjoorSearchVerseViewModel[]> res = await _ganjoorService.SearchVersesByQuery(query, poetId);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
if (res.Result == null)
return NotFound();
return Ok(res.Result);
}
/// <summary>
/// Ganjoor Service
/// </summary>

View File

@ -0,0 +1,36 @@
namespace RMuseum.Models.Ganjoor.ViewModels
{
/// <summary>
/// Ganjoor Verse View Model
/// </summary>
public class GanjoorSearchVerseViewModel
{
/// <summary>
/// global id, auto generated (missing in Ganjoor Desktop database)
/// </summary>
public int Id { get; set; }
/// <summary>
/// vorder
/// </summary>
public int VOrder { get; set; }
/// <summary>
/// position
/// </summary>
public VersePosition VersePosition { get; set; }
/// <summary>
/// text
/// </summary>
public string Text { get; set; }
public int? PoemId { get; set; }
public string PoemFullTitle { get; set; }
public string PoemFullUrl { get; set; }
public int PoetId { get; set; }
}
}

View File

@ -799,6 +799,14 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.SearchVersesByQuery(System.String,System.Int32)">
<summary>
Search Verses By query
</summary>
<param name="query"></param>
<param name="poetId"></param>
<returns></returns>
</member>
<member name="F:RMuseum.Controllers.GanjoorController._ganjoorService">
<summary>
Ganjoor Service
@ -4550,6 +4558,31 @@
root cat id
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.GanjoorSearchVerseViewModel">
<summary>
Ganjoor Verse View Model
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorSearchVerseViewModel.Id">
<summary>
global id, auto generated (missing in Ganjoor Desktop database)
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorSearchVerseViewModel.VOrder">
<summary>
vorder
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorSearchVerseViewModel.VersePosition">
<summary>
position
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GanjoorSearchVerseViewModel.Text">
<summary>
text
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.GanjoorVerseViewModel">
<summary>
Ganjoor Verse View Model
@ -6112,6 +6145,14 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.SearchVersesByQuery(System.String,System.Int32)">
<summary>
Search Verses By query
</summary>
<param name="query"></param>
<param name="poetId"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.Implementation.ArtifactService">
<summary>
IArtifactService implementation

View File

@ -212,5 +212,15 @@ namespace RMuseum.Services
/// </summary>
/// <returns></returns>
RServiceResult<bool> ImportFromMySql();
/// <summary>
/// Search Verses By query
/// </summary>
/// <param name="query"></param>
/// <param name="poetId"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorSearchVerseViewModel[]>> SearchVersesByQuery(string query, int poetId = 0);
}
}

View File

@ -1386,9 +1386,42 @@ namespace RMuseum.Services.Implementation
return new RServiceResult<GanjoorPoemCompleteViewModel>(null, exp.ToString());
}
}
public async Task<RServiceResult<GanjoorSearchVerseViewModel[]>> SearchVersesByQuery(string query, int poetId = 0)
{
try
{
var versesQ = _context.GanjoorVerses.Include(v => v.Poem).ThenInclude(p => p.Cat)
.Where(v => v.Text.Contains(query));
if (poetId != 0)
{
versesQ = versesQ.Where(v => v.Poem.Cat.PoetId == poetId);
}
var verses = await versesQ.Select
(
v => new GanjoorSearchVerseViewModel
{
Id = v.Id,
VOrder = v.VOrder,
VersePosition = v.VersePosition,
Text = v.Text,
PoemId = v.PoemId,
PoetId = v.Poem.Cat.PoetId,
PoemFullTitle = v.Poem.FullTitle,
PoemFullUrl = v.Poem.FullUrl,
}
).Take(50).ToArrayAsync();
return new RServiceResult<GanjoorSearchVerseViewModel[]>(verses);
}
catch (Exception exp)
{
return new RServiceResult<GanjoorSearchVerseViewModel[]>(null, exp.ToString());
}
}
/// <summary>
/// Database Contetxt
/// </summary>