🐛 Fixes in CloudFile filemeta transfer via gRPC

This commit is contained in:
2025-07-19 12:03:18 +08:00
parent e0e1eb76cd
commit 4398984551
7 changed files with 73 additions and 52 deletions

View File

@@ -1,6 +1,7 @@
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Text.Json.Serialization;
using DysonNetwork.Pass.Account;
using DysonNetwork.Shared.Data;
using DysonNetwork.Sphere.Chat;
using Microsoft.EntityFrameworkCore;
@@ -48,6 +49,7 @@ public class RealmMember : ModelBase
public Guid RealmId { get; set; }
public Realm Realm { get; set; } = null!;
public Guid AccountId { get; set; }
[NotMapped] public Account? Account { get; set; }
public int Role { get; set; } = RealmMemberRole.Normal;
public Instant? JoinedAt { get; set; }

View File

@@ -62,7 +62,7 @@ public class RealmController(
.Include(e => e.Realm)
.ToListAsync();
return members.ToList();
return await rs.LoadMemberAccounts(members);
}
public class RealmMemberRequest
@@ -256,7 +256,7 @@ public class RealmController(
//
// var result = members.Skip(offset).Take(take).ToList();
//
// return Ok(result);
// return Ok(await rs.LoadMemberAccounts(result));
// }
// else
// {
@@ -269,7 +269,7 @@ public class RealmController(
.Take(take)
.ToListAsync();
return Ok(members);
return Ok(await rs.LoadMemberAccounts(members));
// }
}
@@ -287,7 +287,7 @@ public class RealmController(
.FirstOrDefaultAsync();
if (member is null) return NotFound();
return Ok(member);
return Ok(await rs.LoadMemberAccount(member));
}
[HttpDelete("{slug}/members/me")]

View File

@@ -1,5 +1,6 @@
using DysonNetwork.Shared;
using DysonNetwork.Shared.Proto;
using DysonNetwork.Shared.Registry;
using DysonNetwork.Sphere.Localization;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Localization;
@@ -10,7 +11,8 @@ public class RealmService(
AppDatabase db,
PusherService.PusherServiceClient pusher,
AccountService.AccountServiceClient accounts,
IStringLocalizer<NotificationResource> localizer
IStringLocalizer<NotificationResource> localizer,
AccountClientHelper accountsHelper
)
{
public async Task SendInviteNotify(RealmMember member)
@@ -44,4 +46,24 @@ public class RealmService(
.FirstOrDefaultAsync(m => m.RealmId == realmId && m.AccountId == accountId);
return member?.Role >= maxRequiredRole;
}
public async Task<RealmMember> LoadMemberAccount(RealmMember member)
{
var account = await accountsHelper.GetAccount(member.AccountId);
member.Account = Pass.Account.Account.FromProtoValue(account);
return member;
}
public async Task<List<RealmMember>> LoadMemberAccounts(ICollection<RealmMember> members)
{
var accountIds = members.Select(m => m.AccountId).ToList();
var accounts = (await accountsHelper.GetAccountBatch(accountIds)).ToDictionary(a => Guid.Parse(a.Id), a => a);
return members.Select(m =>
{
if (accounts.TryGetValue(m.AccountId, out var account))
m.Account = Pass.Account.Account.FromProtoValue(account);
return m;
}).ToList();
}
}