diff --git a/Iceshrimp.Backend/Controllers/Web/InstanceController.cs b/Iceshrimp.Backend/Controllers/Web/InstanceController.cs new file mode 100644 index 00000000..22b93b77 --- /dev/null +++ b/Iceshrimp.Backend/Controllers/Web/InstanceController.cs @@ -0,0 +1,40 @@ +using System.Net; +using System.Net.Mime; +using Iceshrimp.Backend.Controllers.Shared.Attributes; +using Iceshrimp.Backend.Controllers.Web.Renderers; +using Iceshrimp.Backend.Core.Database; +using Iceshrimp.Backend.Core.Extensions; +using Iceshrimp.Backend.Core.Middleware; +using Iceshrimp.Shared.Schemas.Web; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.RateLimiting; + +namespace Iceshrimp.Backend.Controllers.Web; + +[ApiController] +[EnableRateLimiting("sliding")] +[Route("/api/iceshrimp/instance")] +[Produces(MediaTypeNames.Application.Json)] +public class InstanceController(DatabaseContext db, UserRenderer userRenderer) : ControllerBase +{ + [HttpGet("staff")] + [Authenticate] + [Authorize] + [ProducesResults(HttpStatusCode.OK)] + public async Task GetStaff() + { + var admins = db.Users + .Where(p => p.IsAdmin == true) + .OrderBy(p => p.UsernameLower); + var adminList = await userRenderer.RenderMany(admins) + .ToListAsync(); + + var moderators = db.Users + .Where(p => p.IsAdmin == false && p.IsModerator == true) + .OrderBy(p => p.UsernameLower); + var moderatorList = await userRenderer.RenderMany(moderators) + .ToListAsync(); + + return new StaffResponse { Admins = adminList, Moderators = moderatorList }; + } +} \ No newline at end of file diff --git a/Iceshrimp.Shared/Schemas/Web/InstanceResponse.cs b/Iceshrimp.Shared/Schemas/Web/InstanceResponse.cs new file mode 100644 index 00000000..8c8bc0e7 --- /dev/null +++ b/Iceshrimp.Shared/Schemas/Web/InstanceResponse.cs @@ -0,0 +1,10 @@ +namespace Iceshrimp.Shared.Schemas.Web; + +// TODO: Instance Response for /api/iceshrimp/instance +public class InstanceResponse { } + +public class StaffResponse +{ + public required List Admins { get; set; } + public required List Moderators { get; set; } +} \ No newline at end of file