#246 service methods for reporting user notes and listing reports and moderating them

This commit is contained in:
Hamid Reza Mohammadi 2021-11-21 19:13:10 +03:30
parent da487be764
commit 5ac0eb103e
5 changed files with 268 additions and 1 deletions

View File

@ -0,0 +1,25 @@
using System;
namespace RMuseum.Models.Note.ViewModels
{
/// <summary>
/// (Public) User Notes Abuse Report View Model
/// </summary>
public class RUserNoteAbuseReportViewModel
{
/// <summary>
/// Id
/// </summary>
public Guid Id { get; set; }
/// <summary>
/// some explanotory text provided by reporter
/// </summary>
public string ReasonText { get; set; }
/// <summary>
/// note
/// </summary>
public RUserNoteViewModel Note { get; set; }
}
}

View File

@ -7905,6 +7905,26 @@
Reference Note Id
</summary>
</member>
<member name="T:RMuseum.Models.Note.ViewModels.RUserNoteAbuseReportViewModel">
<summary>
(Public) User Notes Abuse Report View Model
</summary>
</member>
<member name="P:RMuseum.Models.Note.ViewModels.RUserNoteAbuseReportViewModel.Id">
<summary>
Id
</summary>
</member>
<member name="P:RMuseum.Models.Note.ViewModels.RUserNoteAbuseReportViewModel.ReasonText">
<summary>
some explanotory text provided by reporter
</summary>
</member>
<member name="P:RMuseum.Models.Note.ViewModels.RUserNoteAbuseReportViewModel.Note">
<summary>
note
</summary>
</member>
<member name="T:RMuseum.Models.Note.ViewModels.RUserNoteViewModel">
<summary>
Safe User Note View Model
@ -8716,6 +8736,36 @@
</summary>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.ReportPublicNote(System.Guid,System.Guid,System.String)">
<summary>
report a public note
</summary>
<param name="reportUserId"></param>
<param name="noteId"></param>
<param name="reasonText"></param>
<returns>id of report record</returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.GetReportedPublicNotes(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
Get a list of reported notes
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.DeclinePublicNoteReport(System.Guid)">
<summary>
delete a report for abuse in public user notes
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.IArtifactService.AcceptPublicNoteReport(System.Guid)">
<summary>
delete a reported user note (accept the complaint)
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="T:RMuseum.Services.IDonationService">
<summary>
donation service
@ -10223,6 +10273,36 @@
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.ReportPublicNote(System.Guid,System.Guid,System.String)">
<summary>
report a public note
</summary>
<param name="reportUserId"></param>
<param name="noteId"></param>
<param name="reasonText"></param>
<returns>id of report record</returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.DeclinePublicNoteReport(System.Guid)">
<summary>
delete a report for abuse in public user notes
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.AcceptPublicNoteReport(System.Guid)">
<summary>
delete a reported user note (accept the complaint)
</summary>
<param name="id"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.GetReportedPublicNotes(RSecurityBackend.Models.Generic.PagingParameterModel)">
<summary>
Get a list of reported notes
</summary>
<param name="paging"></param>
<returns></returns>
</member>
<member name="M:RMuseum.Services.Implementation.ArtifactService.SuggestGanjoorLink(System.Guid,RMuseum.Models.GanjoorIntegration.ViewModels.LinkSuggestion)">
<summary>
suggest ganjoor link

View File

@ -526,5 +526,35 @@ namespace RMuseum.Services
/// <returns></returns>
RServiceResult<bool> StartFillingGanjoorLinkOriginalSources();
/// <summary>
/// report a public note
/// </summary>
/// <param name="reportUserId"></param>
/// <param name="noteId"></param>
/// <param name="reasonText"></param>
/// <returns>id of report record</returns>
Task<RServiceResult<Guid>> ReportPublicNote(Guid reportUserId, Guid noteId, string reasonText);
/// <summary>
/// Get a list of reported notes
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
Task<RServiceResult<(PaginationMetadata PagingMeta, RUserNoteAbuseReportViewModel[] Items)>> GetReportedPublicNotes(PagingParameterModel paging);
/// <summary>
/// delete a report for abuse in public user notes
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<RServiceResult<bool>> DeclinePublicNoteReport(Guid id);
/// <summary>
/// delete a reported user note (accept the complaint)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
Task<RServiceResult<bool>> AcceptPublicNoteReport(Guid id);
}
}

View File

@ -2214,6 +2214,138 @@ namespace RMuseum.Services.Implementation
return new RServiceResult<(PaginationMetadata PagingMeta, RUserNoteViewModel[] Notes)>((paginatedResult1.PagingMeta, finalList.ToArray()));
}
/// <summary>
/// report a public note
/// </summary>
/// <param name="reportUserId"></param>
/// <param name="noteId"></param>
/// <param name="reasonText"></param>
/// <returns>id of report record</returns>
public async Task<RServiceResult<Guid>> ReportPublicNote(Guid reportUserId, Guid noteId, string reasonText)
{
try
{
RUserNoteAbuseReport r = new RUserNoteAbuseReport()
{
NoteId = noteId,
ReporterId = reportUserId,
ReasonText = reasonText,
};
_context.ReportedUserNotes.Add(r);
await _context.SaveChangesAsync();
return new RServiceResult<Guid>(r.Id);
}
catch(Exception exp)
{
return new RServiceResult<Guid>(Guid.Empty, exp.ToString());
}
}
/// <summary>
/// delete a report for abuse in public user notes
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> DeclinePublicNoteReport(Guid id)
{
try
{
RUserNoteAbuseReport report = await _context.ReportedUserNotes.Where(r => r.Id == id).SingleOrDefaultAsync();
if (report == null)
{
return new RServiceResult<bool>(false);
}
_context.ReportedUserNotes.Remove(report);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
/// <summary>
/// delete a reported user note (accept the complaint)
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<RServiceResult<bool>> AcceptPublicNoteReport(Guid id)
{
try
{
RUserNoteAbuseReport report = await _context.ReportedUserNotes.AsNoTracking().Where(r => r.Id == id).SingleOrDefaultAsync();
if (report == null)
{
return new RServiceResult<bool>(false, "report not found");
}
var reasonText = report.ReasonText;
RUserNote note = await _context.UserNotes.Where(n => n.Id == report.NoteId).SingleOrDefaultAsync();
if(note == null)
{
return new RServiceResult<bool>(false, "note not found!");
}
await _notificationService.PushNotification((Guid)note.RAppUserId,
"حذف یادداشت عمومی شما",
$"یادداشت عمومی شما به دلیل ناسازگاری با قوانین یادداشت‌گذاری عمومی در گنجینهٔ گنجور و طبق گزارشات دیگر کاربران حذف شده است.{Environment.NewLine}" +
$"توجه فرمایید که یادداشتهای عمومی گنجینهٔ گنجور برای بحث در مورد نسخه‌ها در نظر گرفته شده‌اند و جای بحثهای محتوایی بی‌ربط به نسخهٔ خاص می‌تواند در گنجور باشد.{Environment.NewLine}" +
$"{reasonText}" +
$"این متن یادداشت حذف شدهٔ شماست: {Environment.NewLine}" +
$"{note.HtmlContent}"
);
_context.UserNotes.Remove(note);
await _context.SaveChangesAsync();
return new RServiceResult<bool>(true);
}
catch (Exception exp)
{
return new RServiceResult<bool>(false, exp.ToString());
}
}
/// <summary>
/// Get a list of reported notes
/// </summary>
/// <param name="paging"></param>
/// <returns></returns>
public async Task<RServiceResult<(PaginationMetadata PagingMeta, RUserNoteAbuseReportViewModel[] Items)>> GetReportedPublicNotes(PagingParameterModel paging)
{
var source =
from report in _context.ReportedUserNotes
join note in _context.UserNotes.Include(n => n.RAppUser)
on report.NoteId equals note.Id
select
new RUserNoteAbuseReportViewModel()
{
Id = report.Id,
ReasonText = report.ReasonText,
Note = new RUserNoteViewModel()
{
Id = note.Id,
RAppUserId = note.RAppUserId,
UserName = note.RAppUser.NickName,
RUserImageId = note.RAppUser.RImageId,
Modified = note.Modified,
NoteType = note.NoteType,
HtmlContent = note.HtmlContent,
ReferenceNoteId = note.ReferenceNoteId,
Status = note.Status,
Notes = new RUserNoteViewModel[] { },
DateTime = RUserNoteViewModel.PrepareNoteDateTime(note.DateTime),
LastModified = RUserNoteViewModel.PrepareNoteDateTime(note.LastModified)
}
};
(PaginationMetadata PagingMeta, RUserNoteAbuseReportViewModel[] Items) paginatedResult =
await QueryablePaginator<RUserNoteAbuseReportViewModel>.Paginate(source, paging);
return new RServiceResult<(PaginationMetadata PagingMeta, RUserNoteAbuseReportViewModel[] Items)>(paginatedResult);
}
/// <summary>

View File

@ -913,7 +913,7 @@ namespace RMuseum.Services.Implementation
$"{reason} {Environment.NewLine}";
await _notificationService.PushNotification((Guid)comment.UserId,
"حذف حاشیهٔ شما",
$"حاشیهٔ شما به دلیل ناسازگاری با قوانین حاشیه‌گذاری گنجور و طبق گزارشات دیگر کاربران حذف شده است..{Environment.NewLine}" +
$"حاشیهٔ شما به دلیل ناسازگاری با قوانین حاشیه‌گذاری گنجور و طبق گزارشات دیگر کاربران حذف شده است.{Environment.NewLine}" +
$"{reason}" +
$"این متن حاشیهٔ حذف شدهٔ شماست: {Environment.NewLine}" +
$"{comment.HtmlComment}"