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.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(bool resolved = false) { var reports = await db.Reports .IncludeCommonProperties() .Where(p => p.Resolved == resolved) .ToListAsync(); var rendered = await reportRenderer.RenderManyAsync(reports); var reportsList = new List(); foreach (var r in rendered) { reportsList.Add(new Reports() { Account = r.TargetUser, Actor = r.Reporter, Id = r.Id, CreatedAt = r.CreatedAt, State = r.Resolved ? "resolved" : "open", Content = r.Comment, Statuses = r.Notes }); } var resps = new ReportsResponse() { Total = 1, Reports = reportsList }; return resps; } }