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/")] [ApiController] public class GuildMembersController(ILogger logger, SpacebarDbContext db, SpacebarAspNetAuthenticationService authService) : ControllerBase { /// /// Get a guild member by ID /// /// Guild ID /// Member ID /// The public member projection /// An error has occured [HttpGet("{memberId}")] public async Task 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(); } }