summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs
diff options
context:
space:
mode:
authorRory& <root@rory.gay>2026-02-13 06:12:01 +0100
committerRory& <root@rory.gay>2026-02-13 06:12:18 +0100
commite5b7977f2ae07b42e3be2dbbf79c450b8176ed19 (patch)
tree19a45641ef5b2b4b1c85b0f6700b4a1592bc3a48 /extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs
parentdie (diff)
downloadserver-ts-e5b7977f2ae07b42e3be2dbbf79c450b8176ed19.tar.xz
cs: create uapi project
Diffstat (limited to 'extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs')
-rw-r--r--extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs36
1 files changed, 36 insertions, 0 deletions
diff --git a/extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs b/extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs
new file mode 100644

index 00000000..ac8c1d40 --- /dev/null +++ b/extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs
@@ -0,0 +1,36 @@ +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using Spacebar.Interop.Authentication.AspNetCore; +using Spacebar.Models.Db.Contexts; +using Spacebar.DataMappings.Generic; +using Spacebar.Models.Generic; + +namespace Spacebar.UApi.Controllers; + +[Route("/api/v{_}/guilds/{guildId}/members/")] +public class GuildMembersController(ILogger<GuildMembersController> logger, SpacebarDbContext db, SpacebarAspNetAuthenticationService authService) : ControllerBase { + /// <summary> + /// Get a guild member by ID + /// </summary> + /// <param name="guildId">Guild ID</param> + /// <param name="memberId">Member ID</param> + /// <returns>The public member projection</returns> + /// <exception cref="InvalidOperationException">An error has occured</exception> + [HttpGet("{memberId}")] + public async Task<Member> GetMemberAsync(string guildId, string memberId) { + var user = await authService.GetCurrentUserAsync(Request); + var cmember = db.Members.SingleOrDefault(x => x.Id == user.Id && x.GuildId == guildId); + if (cmember is null) + throw new InvalidOperationException("You are not a member of this guild."); + + var member = db.Members + .Include(x => x.IdNavigation) // User object + .Include(x => x.Roles) + .SingleOrDefault(x => x.Id == user.Id && x.GuildId == guildId); + + if (member is null) + throw new InvalidOperationException("Member not found"); + + return member.ToPublicMember(); + } +} \ No newline at end of file