From 921a10f7abb52e662763fbaabadc3b5674da37e8 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 19 Jul 2025 12:10:43 +0800 Subject: [PATCH] :bug: Fix publisher members has no account info --- DysonNetwork.Sphere/Publisher/Publisher.cs | 1 + .../Publisher/PublisherController.cs | 6 ++--- .../Publisher/PublisherService.cs | 24 ++++++++++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/DysonNetwork.Sphere/Publisher/Publisher.cs b/DysonNetwork.Sphere/Publisher/Publisher.cs index b976d62..f8d4d56 100644 --- a/DysonNetwork.Sphere/Publisher/Publisher.cs +++ b/DysonNetwork.Sphere/Publisher/Publisher.cs @@ -63,6 +63,7 @@ public class PublisherMember : ModelBase public Guid PublisherId { get; set; } [JsonIgnore] public Publisher Publisher { get; set; } = null!; public Guid AccountId { get; set; } + [NotMapped] public Account? Account { get; set; } public PublisherMemberRole Role { get; set; } = PublisherMemberRole.Viewer; public Instant? JoinedAt { get; set; } diff --git a/DysonNetwork.Sphere/Publisher/PublisherController.cs b/DysonNetwork.Sphere/Publisher/PublisherController.cs index 80736ad..1e520e9 100644 --- a/DysonNetwork.Sphere/Publisher/PublisherController.cs +++ b/DysonNetwork.Sphere/Publisher/PublisherController.cs @@ -76,7 +76,7 @@ public class PublisherController( .Include(e => e.Publisher) .ToListAsync(); - return members.ToList(); + return await ps.LoadMemberAccounts(members); } public class PublisherMemberRequest @@ -565,7 +565,7 @@ public class PublisherController( .Take(take) .ToListAsync(); - return Ok(members); + return Ok(await ps.LoadMemberAccounts(members)); } [HttpGet("{name}/members/me")] @@ -586,7 +586,7 @@ public class PublisherController( .FirstOrDefaultAsync(); if (member is null) return NotFound(); - return Ok(member); + return Ok(await ps.LoadMemberAccount(member)); } [HttpGet("{name}/features")] diff --git a/DysonNetwork.Sphere/Publisher/PublisherService.cs b/DysonNetwork.Sphere/Publisher/PublisherService.cs index c63e6d0..1165b24 100644 --- a/DysonNetwork.Sphere/Publisher/PublisherService.cs +++ b/DysonNetwork.Sphere/Publisher/PublisherService.cs @@ -1,6 +1,7 @@ using DysonNetwork.Shared.Cache; using DysonNetwork.Shared.Data; using DysonNetwork.Shared.Proto; +using DysonNetwork.Shared.Registry; using DysonNetwork.Sphere.Post; using Microsoft.EntityFrameworkCore; using NodaTime; @@ -10,7 +11,8 @@ namespace DysonNetwork.Sphere.Publisher; public class PublisherService( AppDatabase db, FileReferenceService.FileReferenceServiceClient fileRefs, - ICacheService cache + ICacheService cache, + AccountClientHelper accountsHelper ) { public async Task GetPublisherByName(string name) @@ -376,4 +378,24 @@ public class PublisherService( return member != null && member.Role >= requiredRole; } + + public async Task LoadMemberAccount(PublisherMember member) + { + var account = await accountsHelper.GetAccount(member.AccountId); + member.Account = Pass.Account.Account.FromProtoValue(account); + return member; + } + + public async Task> LoadMemberAccounts(ICollection 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(); + } } \ No newline at end of file