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…
	
	Add table
		Add a link
		
	
		Reference in a new issue