using System.Net; using System.Net.Mime; using Iceshrimp.Backend.Controllers.Mastodon.Attributes; using Iceshrimp.Backend.Controllers.Pleroma.Schemas; using Iceshrimp.Backend.Controllers.Shared.Attributes; using Iceshrimp.Backend.Controllers.Shared.Schemas; using Iceshrimp.Backend.Controllers.Web.Renderers; using Iceshrimp.Backend.Core.Database; using Iceshrimp.Backend.Core.Extensions; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.RateLimiting; using Microsoft.EntityFrameworkCore; namespace Iceshrimp.Backend.Controllers.Pleroma; [MastodonApiController] [EnableCors("mastodon")] [EnableRateLimiting("sliding")] [Produces(MediaTypeNames.Application.Json)] public class AdminController( DatabaseContext db, ReportRenderer reportRenderer ) : ControllerBase { [HttpGet("/api/v1/pleroma/admin/reports")] [ProducesResults(HttpStatusCode.OK)] public async Task> GetReports(PaginationQuery pq, bool resolved = false) { var reports = await db.Reports .IncludeCommonProperties() .Where(p => p.Resolved == resolved) .Paginate(pq, ControllerContext) .ToListAsync(); var rendered = await reportRenderer.RenderManyAsync(reports); var resps = new List(); foreach (var r in rendered) { resps.Add(new ReportsResponse() { Total = 1, Reports = new Reports() { Account = r.TargetUser, Actor = r.Reporter, Id = r.Id, CreatedAt = r.CreatedAt, State = r.Resolved ? "resolved" : "open", Content = r.Comment, } }); } return resps; } }