summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.UApi/Controllers/GuildMembersController.cs
diff options
context:
space:
mode:
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