feat: GET /api/v1/users/@me
This commit is contained in:
		
							parent
							
								
									478ba2a406
								
							
						
					
					
						commit
						fe1cf7ce8a
					
				
					 3 changed files with 121 additions and 0 deletions
				
			
		|  | @ -122,6 +122,84 @@ public class UsersV1Service(DatabaseContext db) | |||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     public async Task<CurrentUserResponse> RenderCurrentUserAsync( | ||||
|         User user, | ||||
|         CancellationToken ct = default | ||||
|     ) | ||||
|     { | ||||
|         List<Member> members = await db | ||||
|             .Members.Where(m => m.UserId == user.Id) | ||||
|             .OrderBy(m => m.Name) | ||||
|             .ToListAsync(ct); | ||||
| 
 | ||||
|         List<UserFlag> flags = await db | ||||
|             .UserFlags.Where(f => f.UserId == user.Id) | ||||
|             .OrderBy(f => f.Id) | ||||
|             .ToListAsync(ct); | ||||
| 
 | ||||
|         int? utcOffset = null; | ||||
|         if ( | ||||
|             user.Timezone != null | ||||
|             && TimeZoneInfo.TryFindSystemTimeZoneById(user.Timezone, out TimeZoneInfo? tz) | ||||
|         ) | ||||
|         { | ||||
|             utcOffset = (int)tz.GetUtcOffset(DateTimeOffset.UtcNow).TotalSeconds; | ||||
|         } | ||||
| 
 | ||||
|         List<AuthMethod> authMethods = await db | ||||
|             .AuthMethods.Include(a => a.FediverseApplication) | ||||
|             .Where(a => a.UserId == user.Id) | ||||
|             .OrderBy(a => a.Id) | ||||
|             .ToListAsync(ct); | ||||
| 
 | ||||
|         AuthMethod? discord = authMethods.FirstOrDefault(a => a.AuthType is AuthType.Discord); | ||||
|         AuthMethod? google = authMethods.FirstOrDefault(a => a.AuthType is AuthType.Google); | ||||
|         AuthMethod? tumblr = authMethods.FirstOrDefault(a => a.AuthType is AuthType.Tumblr); | ||||
|         AuthMethod? fediverse = authMethods.FirstOrDefault(a => a.AuthType is AuthType.Fediverse); | ||||
| 
 | ||||
|         return new CurrentUserResponse( | ||||
|             user.LegacyId, | ||||
|             user.Id, | ||||
|             user.Sid, | ||||
|             user.Username, | ||||
|             user.DisplayName, | ||||
|             user.Bio, | ||||
|             user.MemberTitle, | ||||
|             user.Avatar, | ||||
|             user.Links, | ||||
|             Names: FieldEntry.FromEntries(user.Names, user.CustomPreferences), | ||||
|             Pronouns: PronounEntry.FromPronouns(user.Pronouns, user.CustomPreferences), | ||||
|             Fields: ProfileField.FromFields(user.Fields, user.CustomPreferences), | ||||
|             Flags: flags | ||||
|                 .Where(f => f.PrideFlag.Hash != null) | ||||
|                 .Select(f => new PrideFlag( | ||||
|                     f.PrideFlag.LegacyId, | ||||
|                     f.PrideFlag.Id, | ||||
|                     f.PrideFlag.Hash!, | ||||
|                     f.PrideFlag.Name, | ||||
|                     f.PrideFlag.Description | ||||
|                 )) | ||||
|                 .ToArray(), | ||||
|             Members: members.Select(m => RenderPartialMember(m, user.CustomPreferences)).ToArray(), | ||||
|             utcOffset, | ||||
|             CustomPreferences: RenderCustomPreferences(user.CustomPreferences), | ||||
|             user.Id.Time, | ||||
|             user.Timezone, | ||||
|             user.Role is UserRole.Admin, | ||||
|             user.ListHidden, | ||||
|             user.LastSidReroll, | ||||
|             discord?.RemoteId, | ||||
|             discord?.RemoteUsername, | ||||
|             google?.RemoteId, | ||||
|             google?.RemoteUsername, | ||||
|             tumblr?.RemoteId, | ||||
|             tumblr?.RemoteUsername, | ||||
|             fediverse?.RemoteId, | ||||
|             fediverse?.RemoteUsername, | ||||
|             fediverse?.FediverseApplication?.Domain | ||||
|         ); | ||||
|     } | ||||
| 
 | ||||
|     private static Dictionary<Guid, CustomPreference> RenderCustomPreferences( | ||||
|         Dictionary<Snowflake, User.CustomPreference> customPreferences | ||||
|     ) => | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue