feat: GET /api/v1/users/{userRef}/members
This commit is contained in:
		
							parent
							
								
									e908e67ca6
								
							
						
					
					
						commit
						78afb8b9c4
					
				
					 2 changed files with 43 additions and 6 deletions
				
			
		|  | @ -12,15 +12,21 @@ | |||
| // | ||||
| // You should have received a copy of the GNU Affero General Public License | ||||
| // along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
| using Foxnouns.Backend.Database; | ||||
| using Foxnouns.Backend.Database.Models; | ||||
| using Foxnouns.Backend.Dto.V1; | ||||
| using Foxnouns.Backend.Services.V1; | ||||
| using Microsoft.AspNetCore.Mvc; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| 
 | ||||
| namespace Foxnouns.Backend.Controllers.V1; | ||||
| 
 | ||||
| [Route("/api/v1")] | ||||
| public class UsersV1Controller(UsersV1Service usersV1Service, MembersV1Service membersV1Service) | ||||
|     : ApiControllerBase | ||||
| public class UsersV1Controller( | ||||
|     UsersV1Service usersV1Service, | ||||
|     MembersV1Service membersV1Service, | ||||
|     DatabaseContext db | ||||
| ) : ApiControllerBase | ||||
| { | ||||
|     [HttpGet("users/{userRef}")] | ||||
|     public async Task<IActionResult> GetUserAsync(string userRef, CancellationToken ct = default) | ||||
|  | @ -50,4 +56,33 @@ public class UsersV1Controller(UsersV1Service usersV1Service, MembersV1Service m | |||
|             ) | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     [HttpGet("users/{userRef}/members")] | ||||
|     public async Task<IActionResult> GetUserMembersAsync( | ||||
|         string userRef, | ||||
|         CancellationToken ct = default | ||||
|     ) | ||||
|     { | ||||
|         User user = await usersV1Service.ResolveUserAsync(userRef, CurrentToken, ct); | ||||
|         List<Member> members = await db | ||||
|             .Members.Where(m => m.UserId == user.Id) | ||||
|             .OrderBy(m => m.Name) | ||||
|             .ToListAsync(ct); | ||||
| 
 | ||||
|         List<MemberResponse> responses = []; | ||||
|         foreach (Member member in members) | ||||
|         { | ||||
|             responses.Add( | ||||
|                 await membersV1Service.RenderMemberAsync( | ||||
|                     member, | ||||
|                     CurrentToken, | ||||
|                     user, | ||||
|                     renderFlags: true, | ||||
|                     ct: ct | ||||
|                 ) | ||||
|             ); | ||||
|         } | ||||
| 
 | ||||
|         return Ok(responses); | ||||
|     } | ||||
| } | ||||
|  |  | |||
|  | @ -47,10 +47,12 @@ public class MembersV1Service(DatabaseContext db) | |||
|     public async Task<MemberResponse> RenderMemberAsync( | ||||
|         Member m, | ||||
|         Token? token = default, | ||||
|         User? user = null, | ||||
|         bool renderFlags = true, | ||||
|         CancellationToken ct = default | ||||
|     ) | ||||
|     { | ||||
|         user ??= m.User; | ||||
|         bool renderUnlisted = m.UserId == token?.UserId; | ||||
| 
 | ||||
|         List<MemberFlag> flags = renderFlags | ||||
|  | @ -66,9 +68,9 @@ public class MembersV1Service(DatabaseContext db) | |||
|             m.Bio, | ||||
|             m.Avatar, | ||||
|             m.Links, | ||||
|             Names: FieldEntry.FromEntries(m.Names, m.User.CustomPreferences), | ||||
|             Pronouns: PronounEntry.FromPronouns(m.Pronouns, m.User.CustomPreferences), | ||||
|             Fields: ProfileField.FromFields(m.Fields, m.User.CustomPreferences), | ||||
|             Names: FieldEntry.FromEntries(m.Names, user.CustomPreferences), | ||||
|             Pronouns: PronounEntry.FromPronouns(m.Pronouns, user.CustomPreferences), | ||||
|             Fields: ProfileField.FromFields(m.Fields, user.CustomPreferences), | ||||
|             Flags: flags | ||||
|                 .Where(f => f.PrideFlag.Hash != null) | ||||
|                 .Select(f => new PrideFlag( | ||||
|  | @ -79,7 +81,7 @@ public class MembersV1Service(DatabaseContext db) | |||
|                     f.PrideFlag.Description | ||||
|                 )) | ||||
|                 .ToArray(), | ||||
|             User: UsersV1Service.RenderPartialUser(m.User), | ||||
|             User: UsersV1Service.RenderPartialUser(user), | ||||
|             Unlisted: renderUnlisted ? m.Unlisted : null | ||||
|         ); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue