This commit is contained in:
Hamid Reza Mohammadi 2025-02-14 21:23:29 +03:30
parent ba915c604b
commit 23bf337841
3 changed files with 330 additions and 0 deletions

View File

@ -4506,6 +4506,251 @@ namespace RMuseum.Controllers
}
/// <summary>
/// send cat corrections
/// </summary>
/// <param name="correction"></param>
/// <returns></returns>
[HttpPost]
[Route("cat/correction")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorCatCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> SuggestCatCorrectionAsync([FromBody] GanjoorCatCorrectionViewModel correction)
{
if (ReadOnlyMode)
return BadRequest("سایت به دلایل فنی مثل انتقال سرور موقتاً در حالت فقط خواندنی قرار دارد. لطفاً ساعاتی دیگر مجدداً تلاش کنید.");
correction.UserId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorCatCorrectionViewModel> res =
await _ganjoorService.SuggestCatCorrectionAsync(correction);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
if (res.Result == null)
return NotFound();
return Ok(res.Result);
}
/// <summary>
/// delete unreviewed user cat corrections for a poem
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete]
[Route("cat/correction/{id}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK)]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> DeleteCatCorrectionsAsync(int id)
{
if (ReadOnlyMode)
return BadRequest("سایت به دلایل فنی مثل انتقال سرور موقتاً در حالت فقط خواندنی قرار دارد. لطفاً ساعاتی دیگر مجدداً تلاش کنید.");
var userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
var res =
await _ganjoorService.DeleteCatCorrectionsAsync(userId, id);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok();
}
/// <summary>
/// returns last unreviewed correction from the user for a cat
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
[Route("cat/correction/last/{id}")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorCatCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetLastUnreviewedUserCorrectionForCatAsync(int id)
{
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorCatCorrectionViewModel> res =
await _ganjoorService.GetLastUnreviewedUserCorrectionForCatAsync(userId, id);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);//might be null
}
/// <summary>
/// get list of user suggested cat corrections
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
[HttpGet]
[Route("cat/corrections/mine")]
[Authorize]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<GanjoorCatCorrectionViewModel>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetUserCatCorrectionsAsync([FromQuery] PagingParameterModel paging)
{
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
var res =
await _ganjoorService.GetUserCatCorrectionsAsync(userId, paging);
// Paging Header
HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(res.Result.PagingMeta));
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result.Items);
}
/// <summary>
/// get list of all suggested cat corrections
/// </summary>
/// <param name="paging"></param>
/// <param name="userId">userId</param>
/// <returns></returns>
[HttpGet]
[Route("cat/corrections/all")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<GanjoorCatCorrectionViewModel>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
public async Task<IActionResult> GetAllCatCorrectionsAsync([FromQuery] PagingParameterModel paging, Guid? userId = null)
{
var res =
await _ganjoorService.GetUserCatCorrectionsAsync(userId ?? Guid.Empty, paging);
// Paging Header
HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(res.Result.PagingMeta));
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result.Items);
}
/// <summary>
/// effective corrections for a cat
/// </summary>
/// <param name="id"></param>
/// <param name="paging"></param>
/// <returns></returns>
[HttpGet]
[Route("cat/{id}/corrections/effective")]
[AllowAnonymous]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(IEnumerable<GanjoorCatCorrectionViewModel>))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetCatEffectiveCorrectionsAsync(int id, [FromQuery] PagingParameterModel paging)
{
var res =
await _ganjoorService.GetCatEffectiveCorrectionsAsync(id, paging);
// Paging Header
HttpContext.Response.Headers.Append("paging-headers", JsonConvert.SerializeObject(res.Result.PagingMeta));
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result.Items);
}
/// <summary>
/// get cat correction by id
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet]
[Route("cat/correction/{id}")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorCatCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetCatCorrectionByIdAsync(int id)
{
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorCatCorrectionViewModel> res =
await _ganjoorService.GetCatCorrectionByIdAsync(id);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
return Ok(res.Result);//might be null
}
/// <summary>
/// get next unreviewed cat correction
/// </summary>
/// <param name="skip"></param>
/// <param name="onlyUserCorrections"></param>
/// <returns></returns>
[HttpGet]
[Route("cat/correction/next")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorCatCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> GetNextUnreviewedCatCorrectionAsync(int skip = 0, bool onlyUserCorrections = false)
{
RServiceResult<GanjoorCatCorrectionViewModel> res =
await _ganjoorService.GetNextUnreviewedCatCorrectionAsync(skip, onlyUserCorrections);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
var resCount = await _ganjoorService.GetUnreviewedCatCorrectionCountAsync(onlyUserCorrections);
if (!string.IsNullOrEmpty(resCount.ExceptionString))
return BadRequest(resCount.ExceptionString);
// Paging Header
HttpContext.Response.Headers.Append("paging-headers",
JsonConvert.SerializeObject(
new PaginationMetadata()
{
totalCount = resCount.Result,
pageSize = -1,
currentPage = -1,
hasNextPage = false,
hasPreviousPage = false,
totalPages = -1
})
);
return Ok(res.Result);//might be null
}
/// <summary>
/// moderate cat correction
/// </summary>
/// <param name="correction"></param>
/// <returns></returns>
[HttpPost]
[Route("cat/correction/moderate")]
[Authorize(Policy = RMuseumSecurableItem.GanjoorEntityShortName + ":" + SecurableItem.ModifyOperationShortName)]
[ProducesResponseType((int)HttpStatusCode.OK, Type = typeof(GanjoorCatCorrectionViewModel))]
[ProducesResponseType((int)HttpStatusCode.BadRequest, Type = typeof(string))]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public async Task<IActionResult> ModerateCatCorrectionAsync([FromBody] GanjoorCatCorrectionViewModel correction)
{
if (ReadOnlyMode)
return BadRequest("سایت به دلایل فنی مثل انتقال سرور موقتاً در حالت فقط خواندنی قرار دارد. لطفاً ساعاتی دیگر مجدداً تلاش کنید.");
Guid userId =
new Guid(User.Claims.FirstOrDefault(c => c.Type == "UserId").Value);
RServiceResult<GanjoorCatCorrectionViewModel> res =
await _ganjoorService.ModerateCatCorrectionAsync(userId, correction);
if (!string.IsNullOrEmpty(res.ExceptionString))
return BadRequest(res.ExceptionString);
if (res.Result == null)
return NotFound();
return Ok(res.Result);
}
/// <summary>

View File

@ -2378,6 +2378,72 @@
<param name="count"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.SuggestCatCorrectionAsync(RMuseum.Models.Ganjoor.ViewModels.GanjoorCatCorrectionViewModel)">
<summary>
send cat corrections
</summary>
<param name="correction"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.DeleteCatCorrectionsAsync(System.Int32)">
<summary>
delete unreviewed user cat corrections for a poem
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetLastUnreviewedUserCorrectionForCatAsync(System.Int32)">
<summary>
returns last unreviewed correction from the user for a cat
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetUserCatCorrectionsAsync(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
get list of user suggested cat corrections
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetAllCatCorrectionsAsync(RSecurityBackend.Models.Generic.PagingParameterModel,System.Nullable{System.Guid})">
<summary>
get list of all suggested cat corrections
</summary>
<param name="paging"></param>
<param name="userId">userId</param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetCatEffectiveCorrectionsAsync(System.Int32,RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
effective corrections for a cat
</summary>
<param name="id"></param>
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetCatCorrectionByIdAsync(System.Int32)">
<summary>
get cat correction by id
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.GetNextUnreviewedCatCorrectionAsync(System.Int32,System.Boolean)">
<summary>
get next unreviewed cat correction
</summary>
<param name="skip"></param>
<param name="onlyUserCorrections"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Controllers.GanjoorController.ModerateCatCorrectionAsync(RMuseum.Models.Ganjoor.ViewModels.GanjoorCatCorrectionViewModel)">
<summary>
moderate cat correction
</summary>
<param name="correction"></param>
<returns></returns>
</member>
<member name="P:RMuseum.Controllers.GanjoorController.ReadOnlyMode">
<summary>
readonly mode
@ -17472,6 +17538,14 @@
<param name="onlyUserCorrections"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IGanjoorService.ModerateCatCorrectionAsync(System.Guid,RMuseum.Models.Ganjoor.ViewModels.GanjoorCatCorrectionViewModel)">
<summary>
moderate cat correction
</summary>
<param name="userId"></param>
<param name="moderation"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IGanjoorTranslationService">
<summary>
translation service implementation

View File

@ -1617,5 +1617,16 @@ namespace RMuseum.Services
/// <returns></returns>
Task<RServiceResult<int>> GetUnreviewedCatCorrectionCountAsync(bool onlyUserCorrections);
/// <summary>
/// moderate cat correction
/// </summary>
/// <param name="userId"></param>
/// <param name="moderation"></param>
/// <returns></returns>
Task<RServiceResult<GanjoorCatCorrectionViewModel>> ModerateCatCorrectionAsync(Guid userId,
GanjoorCatCorrectionViewModel moderation);
}
}