using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using MongoDB.Entities; using PrivaPub.ClientModels; using PrivaPub.Extensions; using PrivaPub.Models.Social; namespace PrivaPub.Controllers.ClientToServer { [ApiController, Route("clientapi/moderator"), Authorize(Policy = Policies.IsModerator)] public class ModeratorController : ControllerBase { [HttpGet, Route("/clientapi/moderator/reports")] public async Task Reports([FromQuery] bool resolved, CancellationToken token) => Ok((await DB.Default.Find().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 Resolve(string id, CancellationToken token) { var result = await DB.Default.Update().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(); } } }