2026-10-01 12:13:57 +02:00
|
|
|
using Microsoft.AspNetCore.Authorization;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
|
|
|
|
|
using MongoDB.Entities;
|
|
|
|
|
|
|
|
|
|
using PrivaPub.ClientModels;
|
|
|
|
|
using PrivaPub.Extensions;
|
|
|
|
|
using PrivaPub.Models.Social;
|
2023-02-18 08:52:17 +01:00
|
|
|
|
2023-02-19 00:43:43 +01:00
|
|
|
namespace PrivaPub.Controllers.ClientToServer
|
2023-02-18 08:52:17 +01:00
|
|
|
{
|
|
|
|
|
[ApiController,
|
2026-10-01 12:13:57 +02:00
|
|
|
Route("clientapi/moderator"),
|
|
|
|
|
Authorize(Policy = Policies.IsModerator)]
|
2023-02-18 08:52:17 +01:00
|
|
|
public class ModeratorController : ControllerBase
|
|
|
|
|
{
|
2026-10-01 12:13:57 +02:00
|
|
|
[HttpGet, Route("/clientapi/moderator/reports")]
|
|
|
|
|
public async Task<IActionResult> Reports([FromQuery] bool resolved, CancellationToken token) =>
|
|
|
|
|
Ok((await DB.Default.Find<Report>().Match(r => r.IsResolved == resolved).Sort(r => r.ID, Order.Descending).Limit(100).ExecuteAsync(token))
|
|
|
|
|
.Select(r => new
|
|
|
|
|
{
|
|
|
|
|
r.ID,
|
|
|
|
|
Reporter = r.ReporterAvatarId != default ? "local" : r.ReporterActorURI,
|
|
|
|
|
r.TargetAccountId,
|
|
|
|
|
r.TargetActorURI,
|
|
|
|
|
r.PostIds,
|
|
|
|
|
r.ObjectURIs,
|
|
|
|
|
r.Category,
|
|
|
|
|
r.Comment,
|
|
|
|
|
r.Forwarded,
|
|
|
|
|
r.IsResolved,
|
|
|
|
|
r.CreatedAt,
|
|
|
|
|
r.ResolvedAt
|
|
|
|
|
}));
|
|
|
|
|
|
|
|
|
|
[HttpPost, Route("/clientapi/moderator/reports/{id}/resolve")]
|
|
|
|
|
public async Task<IActionResult> Resolve(string id, CancellationToken token)
|
|
|
|
|
{
|
|
|
|
|
var result = await DB.Default.Update<Report>().MatchID(id)
|
|
|
|
|
.Modify(r => r.IsResolved, true)
|
|
|
|
|
.Modify(r => r.ResolvedAt, DateTime.UtcNow)
|
|
|
|
|
.Modify(r => r.ResolvedBy, User.GetUserId())
|
|
|
|
|
.ExecuteAsync(token);
|
|
|
|
|
return result.MatchedCount == 0 ? NotFound() : Ok();
|
|
|
|
|
}
|
2023-02-18 08:52:17 +01:00
|
|
|
}
|
|
|
|
|
}
|