using Foxchat.Chat.Database; using Foxchat.Chat.Database.Models; using Foxchat.Core.Federation; using Foxchat.Core.Models; using Microsoft.EntityFrameworkCore; namespace Foxchat.Chat.Services; public class UserResolverService(ILogger logger, ChatContext db, RequestSigningService requestSigningService) { public async Task ResolveUserAsync(IdentityInstance instance, string userId) { var user = await db.Users.FirstOrDefaultAsync(u => u.InstanceId == instance.Id && u.RemoteUserId == userId); if (user != null) { // TODO: update user if it's been long enough return user; } var userResponse = await requestSigningService.RequestAsync(HttpMethod.Get, instance.Domain, $"/_fox/ident/users/{userId}"); user = new User { Instance = instance, Username = userResponse.Username, RemoteUserId = userResponse.Id, Avatar = userResponse.AvatarUrl }; db.Add(user); await db.SaveChangesAsync(); return user; } }