feat: GET /api/v1/users/{userRef}/members/{memberRef}
This commit is contained in:
parent
78afb8b9c4
commit
478ba2a406
2 changed files with 62 additions and 2 deletions
|
@ -22,7 +22,7 @@ using Microsoft.EntityFrameworkCore;
|
||||||
namespace Foxnouns.Backend.Controllers.V1;
|
namespace Foxnouns.Backend.Controllers.V1;
|
||||||
|
|
||||||
[Route("/api/v1")]
|
[Route("/api/v1")]
|
||||||
public class UsersV1Controller(
|
public class V1ReadController(
|
||||||
UsersV1Service usersV1Service,
|
UsersV1Service usersV1Service,
|
||||||
MembersV1Service membersV1Service,
|
MembersV1Service membersV1Service,
|
||||||
DatabaseContext db
|
DatabaseContext db
|
||||||
|
@ -85,4 +85,27 @@ public class UsersV1Controller(
|
||||||
|
|
||||||
return Ok(responses);
|
return Ok(responses);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[HttpGet("users/{userRef}/members/{memberRef}")]
|
||||||
|
public async Task<IActionResult> GetUserMemberAsync(
|
||||||
|
string userRef,
|
||||||
|
string memberRef,
|
||||||
|
CancellationToken ct = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Member member = await membersV1Service.ResolveMemberAsync(
|
||||||
|
userRef,
|
||||||
|
memberRef,
|
||||||
|
CurrentToken,
|
||||||
|
ct
|
||||||
|
);
|
||||||
|
return Ok(
|
||||||
|
await membersV1Service.RenderMemberAsync(
|
||||||
|
member,
|
||||||
|
CurrentToken,
|
||||||
|
renderFlags: true,
|
||||||
|
ct: ct
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -21,7 +21,7 @@ using PrideFlag = Foxnouns.Backend.Dto.V1.PrideFlag;
|
||||||
|
|
||||||
namespace Foxnouns.Backend.Services.V1;
|
namespace Foxnouns.Backend.Services.V1;
|
||||||
|
|
||||||
public class MembersV1Service(DatabaseContext db)
|
public class MembersV1Service(DatabaseContext db, UsersV1Service usersV1Service)
|
||||||
{
|
{
|
||||||
public async Task<Member> ResolveMemberAsync(string id, CancellationToken ct = default)
|
public async Task<Member> ResolveMemberAsync(string id, CancellationToken ct = default)
|
||||||
{
|
{
|
||||||
|
@ -44,6 +44,43 @@ public class MembersV1Service(DatabaseContext db)
|
||||||
throw new ApiError.NotFound("No member with that ID found.", ErrorCode.MemberNotFound);
|
throw new ApiError.NotFound("No member with that ID found.", ErrorCode.MemberNotFound);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public async Task<Member> ResolveMemberAsync(
|
||||||
|
string userRef,
|
||||||
|
string memberRef,
|
||||||
|
Token? token,
|
||||||
|
CancellationToken ct = default
|
||||||
|
)
|
||||||
|
{
|
||||||
|
User user = await usersV1Service.ResolveUserAsync(userRef, token, ct);
|
||||||
|
|
||||||
|
Member? member;
|
||||||
|
if (Snowflake.TryParse(memberRef, out Snowflake? sf))
|
||||||
|
{
|
||||||
|
member = await db
|
||||||
|
.Members.Include(m => m.User)
|
||||||
|
.FirstOrDefaultAsync(m => m.Id == sf && m.UserId == user.Id, ct);
|
||||||
|
if (member != null)
|
||||||
|
return member;
|
||||||
|
}
|
||||||
|
|
||||||
|
member = await db
|
||||||
|
.Members.Include(m => m.User)
|
||||||
|
.FirstOrDefaultAsync(m => m.LegacyId == memberRef && m.UserId == user.Id, ct);
|
||||||
|
if (member != null)
|
||||||
|
return member;
|
||||||
|
|
||||||
|
member = await db
|
||||||
|
.Members.Include(m => m.User)
|
||||||
|
.FirstOrDefaultAsync(m => m.Name == memberRef && m.UserId == user.Id, ct);
|
||||||
|
if (member != null)
|
||||||
|
return member;
|
||||||
|
|
||||||
|
throw new ApiError.NotFound(
|
||||||
|
"No member with that ID or name found.",
|
||||||
|
ErrorCode.MemberNotFound
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<MemberResponse> RenderMemberAsync(
|
public async Task<MemberResponse> RenderMemberAsync(
|
||||||
Member m,
|
Member m,
|
||||||
Token? token = default,
|
Token? token = default,
|
||||||
|
|
Loading…
Reference in a new issue