Iceshrimp.NET/Iceshrimp.Backend/Core/Services/ReportService.cs

49 lines
1.5 KiB
C#

using Iceshrimp.Backend.Core.Database;
using Iceshrimp.Backend.Core.Database.Tables;
using Iceshrimp.Backend.Core.Extensions;
using Iceshrimp.Backend.Core.Helpers;
namespace Iceshrimp.Backend.Core.Services;
public class ReportService(
ActivityPub.ActivityDeliverService deliverSvc,
ActivityPub.ActivityRenderer activityRenderer,
SystemUserService sysUserSvc,
DatabaseContext db
) : IScopedService
{
public async Task ForwardReportAsync(Report report, string? comment)
{
if (report.TargetUser.IsLocalUser)
throw new Exception("Refusing to forward report to local instance");
var actor = await sysUserSvc.GetInstanceActorAsync();
var activity = activityRenderer.RenderFlag(actor, report.TargetUser, report.Notes, comment ?? report.Comment);
var inbox = report.TargetUser.SharedInbox
?? report.TargetUser.Inbox
?? throw new Exception("Target user does not have inbox");
await deliverSvc.DeliverToAsync(activity, actor, inbox);
}
public async Task<Report> CreateReportAsync(User reporter, User target, IEnumerable<Note> notes, string comment)
{
var report = new Report
{
Id = IdHelpers.GenerateSnowflakeId(),
CreatedAt = DateTime.UtcNow,
TargetUser = target,
TargetUserHost = target.Host,
Reporter = reporter,
ReporterHost = reporter.Host,
Notes = notes.ToArray(),
Comment = comment
};
db.Add(report);
await db.SaveChangesAsync();
await db.ReloadEntityRecursivelyAsync(report);
return report;
}
}