From 59ed135f202b7097fd98c77bc6d66716a590e1f1 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sun, 12 Oct 2025 21:57:37 +0800 Subject: [PATCH] :sparkles: Load account info in reaction list API --- DysonNetwork.Shared/Models/Post.cs | 5 +-- .../Post/AccountHelperClient.cs | 0 DysonNetwork.Sphere/Post/PostController.cs | 32 ++++++++++++------- 3 files changed, 24 insertions(+), 13 deletions(-) create mode 100644 DysonNetwork.Sphere/Post/AccountHelperClient.cs diff --git a/DysonNetwork.Shared/Models/Post.cs b/DysonNetwork.Shared/Models/Post.cs index 5e3ac6b..fa3f13d 100644 --- a/DysonNetwork.Shared/Models/Post.cs +++ b/DysonNetwork.Shared/Models/Post.cs @@ -123,7 +123,7 @@ public class SnPostCategorySubscription : ModelBase { public Guid Id { get; set; } public Guid AccountId { get; set; } - + public Guid? CategoryId { get; set; } public SnPostCategory? Category { get; set; } public Guid? TagId { get; set; } @@ -168,6 +168,7 @@ public class SnPostReaction : ModelBase public Guid PostId { get; set; } [JsonIgnore] public SnPost Post { get; set; } = null!; public Guid AccountId { get; set; } + [NotMapped] public SnAccount? Account { get; set; } } public class SnPostAward : ModelBase @@ -176,7 +177,7 @@ public class SnPostAward : ModelBase public decimal Amount { get; set; } public PostReactionAttitude Attitude { get; set; } [MaxLength(4096)] public string? Message { get; set; } - + public Guid PostId { get; set; } [JsonIgnore] public SnPost Post { get; set; } = null!; public Guid AccountId { get; set; } diff --git a/DysonNetwork.Sphere/Post/AccountHelperClient.cs b/DysonNetwork.Sphere/Post/AccountHelperClient.cs new file mode 100644 index 0000000..e69de29 diff --git a/DysonNetwork.Sphere/Post/PostController.cs b/DysonNetwork.Sphere/Post/PostController.cs index 3413276..14f14b3 100644 --- a/DysonNetwork.Sphere/Post/PostController.cs +++ b/DysonNetwork.Sphere/Post/PostController.cs @@ -4,6 +4,7 @@ using DysonNetwork.Shared.Auth; using DysonNetwork.Shared.Data; using DysonNetwork.Shared.Models; using DysonNetwork.Shared.Proto; +using DysonNetwork.Shared.Registry; using DysonNetwork.Sphere.Poll; using DysonNetwork.Sphere.Realm; using DysonNetwork.Sphere.WebReader; @@ -23,6 +24,7 @@ public class PostController( AppDatabase db, PostService ps, PublisherService pub, + AccountClientHelper accountsHelper, AccountService.AccountServiceClient accounts, ActionLogService.ActionLogServiceClient als, PaymentService.PaymentServiceClient payments, @@ -97,7 +99,7 @@ public class PostController( if (currentUser != null) { var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id }); + { AccountId = currentUser.Id }); userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); } @@ -197,7 +199,7 @@ public class PostController( if (currentUser != null) { var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id }); + { AccountId = currentUser.Id }); userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); } @@ -228,7 +230,7 @@ public class PostController( if (currentUser != null) { var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id }); + { AccountId = currentUser.Id }); userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); } @@ -271,6 +273,14 @@ public class PostController( .Take(take) .Skip(offset) .ToListAsync(); + + var accountsProto = await accountsHelper.GetAccountBatch(reactions.Select(r => r.AccountId).ToList()); + var accounts = accountsProto.ToDictionary(a => Guid.Parse(a.Id), a => SnAccount.FromProtoValue(a)); + + foreach (var reaction in reactions) + if (accounts.TryGetValue(reaction.AccountId, out var account)) + reaction.Account = account; + return Ok(reactions); } @@ -283,7 +293,7 @@ public class PostController( if (currentUser != null) { var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id }); + { AccountId = currentUser.Id }); userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); } @@ -314,7 +324,7 @@ public class PostController( if (currentUser != null) { var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id }); + { AccountId = currentUser.Id }); userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); } @@ -342,7 +352,7 @@ public class PostController( if (currentUser != null) { var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id }); + { AccountId = currentUser.Id }); userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); } @@ -514,7 +524,7 @@ public class PostController( }); post.Publisher = publisher; - + return post; } @@ -536,7 +546,7 @@ public class PostController( var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id.ToString() }); + { AccountId = currentUser.Id.ToString() }); var userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); var userPublishers = await pub.GetUserPublishers(Guid.Parse(currentUser.Id)); @@ -632,7 +642,7 @@ public class PostController( var friendsResponse = await accounts.ListFriendsAsync(new ListRelationshipSimpleRequest - { AccountId = currentUser.Id.ToString() }); + { AccountId = currentUser.Id.ToString() }); var userFriends = friendsResponse.AccountsId.Select(Guid.Parse).ToList(); var userPublishers = await pub.GetUserPublishers(Guid.Parse(currentUser.Id)); @@ -883,7 +893,7 @@ public class PostController( UserAgent = Request.Headers.UserAgent, IpAddress = Request.HttpContext.Connection.RemoteIpAddress?.ToString() }); - + return Ok(post); } @@ -915,4 +925,4 @@ public class PostController( return NoContent(); } -} \ No newline at end of file +}