From 28b3b56646a8da39c18599dcd60f4497154959e2 Mon Sep 17 00:00:00 2001 From: pancakes Date: Wed, 13 Nov 2024 14:57:04 +1000 Subject: [PATCH] [backend/api] Add instance staff endpoint --- .../Controllers/Web/InstanceController.cs | 40 +++++++++++++++++++ .../Schemas/Web/InstanceResponse.cs | 10 +++++ 2 files changed, 50 insertions(+) create mode 100644 Iceshrimp.Backend/Controllers/Web/InstanceController.cs create mode 100644 Iceshrimp.Shared/Schemas/Web/InstanceResponse.cs 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