docs: #288 API added for searching through museum artifacts and items

This commit is contained in:
Hamid Reza Mohammadi 2022-02-25 16:30:45 +03:30
parent e58af6cd76
commit 13018f7380
4 changed files with 192 additions and 0 deletions

View File

@ -2000,6 +2000,54 @@ namespace RMuseum.Controllers
}
}
/// <summary>
/// search artifacts
/// </summary>
/// <param name="paging"></param>
/// <param name="term"></param>
/// <returns></returns>
[HttpGet]
[Route("search")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<RArtifactMasterRecord>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> SearchArtifacts([FromQuery] PagingParameterModel paging, string term)
{
var pagedResult = await _artifactService.SearchArtifacts(paging, term);
if (!string.IsNullOrEmpty(pagedResult.ExceptionString))
return BadRequest(pagedResult.ExceptionString);
// Paging Header
HttpContext.Response.Headers.Add("paging-headers", JsonConvert.SerializeObject(pagedResult.Result.PagingMeta));
return Ok(pagedResult.Result.Items);
}
/// <summary>
/// search artifact items
/// </summary>
/// <param name="paging"></param>
/// <param name="term"></param>
/// <returns></returns>
[HttpGet]
[Route("search/items")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<RArtifactItemRecord>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> SearchArtifactItems([FromQuery] PagingParameterModel paging, string term)
{
var pagedResult = await _artifactService.SearchArtifactItems(paging, term);
if (!string.IsNullOrEmpty(pagedResult.ExceptionString))
return BadRequest(pagedResult.ExceptionString);
// Paging Header
HttpContext.Response.Headers.Add("paging-headers", JsonConvert.SerializeObject(pagedResult.Result.PagingMeta));
return Ok(pagedResult.Result.Items);
}
/// <summary>
/// readonly mode
/// </summary>

View File

@ -602,6 +602,22 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.ArtifactController.SearchArtifacts(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
<summary>
search artifacts
</summary>
<param name="paging"></param>
<param name="term"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.ArtifactController.SearchArtifactItems(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
<summary>
search artifact items
</summary>
<param name="paging"></param>
<param name="term"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Controllers.ArtifactController.ReadOnlyMode">
<summary>
readonly mode
@ -9977,6 +9993,22 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.SearchArtifacts(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
<summary>
Search Artifacts
</summary>
<param name="paging"></param>
<param name="term"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.SearchArtifactItems(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
<summary>
search artifact items
</summary>
<param name="paging"></param>
<param name="term"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IDonationService">
<summary>
donation service
@ -11835,6 +11867,22 @@
<param name="linkId"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.SearchArtifacts(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
<summary>
Search Artifacts
</summary>
<param name="paging"></param>
<param name="term"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.SearchArtifactItems(RSecurityBackend.Models.Generic.PagingParameterModel,System.String)">
<summary>
search artifact items
</summary>
<param name="paging"></param>
<param name="term"></param>
<returns></returns>
</member>
<member name="F:RMuseum.Services.Implementation.ArtifactService._context">
<summary>
Database Contetxt

View File

@ -563,5 +563,21 @@ namespace RMuseum.Services
/// <returns></returns>
RServiceResult<bool> StartRemovingOriginalImages();
/// <summary>
/// Search Artifacts
/// </summary>
/// <param name="paging"></param>
/// <param name="term"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, RArtifactMasterRecord[] Items)>> SearchArtifacts(PagingParameterModel paging, string term);
/// <summary>
/// search artifact items
/// </summary>
/// <param name="paging"></param>
/// <param name="term"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, RArtifactItemRecord[] Items)>> SearchArtifactItems(PagingParameterModel paging, string term);
}
}

View File

@ -25,6 +25,7 @@ using System.Net;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using DNTPersianUtils.Core;
namespace RMuseum.Services.Implementation
{
@ -3184,6 +3185,85 @@ namespace RMuseum.Services.Implementation
return new RServiceResult<bool>(true);
}
/// <summary>
/// Search Artifacts
/// </summary>
/// <param name="paging"></param>
/// <param name="term"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RArtifactMasterRecord[] Items)>> SearchArtifacts(PagingParameterModel paging, string term)
{
term = term.Trim().ApplyCorrectYeKe();
if (string.IsNullOrEmpty(term))
{
return new RServiceResult<(PaginationMetadata PagingMeta, RArtifactMasterRecord[] Items)>((null, null), "خطای جستجوی عبارت خالی");
}
term = term.Replace("‌", " ");//replace zwnj with space
var source =
_context.Artifacts.AsNoTracking().Include(a => a.Tags).Include(a => a.CoverImage)
.Where(p =>
p.Name.Contains(term)
||
p.NameInEnglish.Contains(term)
||
p.Description.Contains(term)
||
p.DescriptionInEnglish.Contains(term)
||
p.Tags.Where(t => t.Value.Contains(term) || t.ValueInEnglish.Contains(term)).Any()
);
(PaginationMetadata PagingMeta, RArtifactMasterRecord[] Items) paginatedResult =
await QueryablePaginator<RArtifactMasterRecord>.Paginate(source, paging);
return new RServiceResult<(PaginationMetadata PagingMeta, RArtifactMasterRecord[] Items)>(paginatedResult);
}
/// <summary>
/// search artifact items
/// </summary>
/// <param name="paging"></param>
/// <param name="term"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RArtifactItemRecord[] Items)>> SearchArtifactItems(PagingParameterModel paging, string term)
{
term = term.Trim().ApplyCorrectYeKe();
if (string.IsNullOrEmpty(term))
{
return new RServiceResult<(PaginationMetadata PagingMeta, RArtifactItemRecord[] Items)>((null, null), "خطای جستجوی عبارت خالی");
}
term = term.Replace("‌", " ");//replace zwnj with space
var source =
_context.Items.AsNoTracking().Include(a => a.Tags).Include(a => a.Images)
.Where(p =>
p.Name.Contains(term)
||
p.NameInEnglish.Contains(term)
||
p.Description.Contains(term)
||
p.DescriptionInEnglish.Contains(term)
||
p.Tags.Where(t => t.Value.Contains(term) || t.ValueInEnglish.Contains(term)).Any()
);
(PaginationMetadata PagingMeta, RArtifactItemRecord[] Items) paginatedResult =
await QueryablePaginator<RArtifactItemRecord>.Paginate(source, paging);
return new RServiceResult<(PaginationMetadata PagingMeta, RArtifactItemRecord[] Items)>(paginatedResult);
}
/// <summary>
/// Database Contetxt
/// </summary>