🐛 Fix publisher members has no account info

This commit is contained in:
2025-07-19 12:10:43 +08:00
parent 4398984551
commit 921a10f7ab
3 changed files with 27 additions and 4 deletions

View File

@@ -63,6 +63,7 @@ public class PublisherMember : ModelBase
public Guid PublisherId { get; set; } public Guid PublisherId { get; set; }
[JsonIgnore] public Publisher Publisher { get; set; } = null!; [JsonIgnore] public Publisher Publisher { get; set; } = null!;
public Guid AccountId { get; set; } public Guid AccountId { get; set; }
[NotMapped] public Account? Account { get; set; }
public PublisherMemberRole Role { get; set; } = PublisherMemberRole.Viewer; public PublisherMemberRole Role { get; set; } = PublisherMemberRole.Viewer;
public Instant? JoinedAt { get; set; } public Instant? JoinedAt { get; set; }

View File

@@ -76,7 +76,7 @@ public class PublisherController(
.Include(e => e.Publisher) .Include(e => e.Publisher)
.ToListAsync(); .ToListAsync();
return members.ToList(); return await ps.LoadMemberAccounts(members);
} }
public class PublisherMemberRequest public class PublisherMemberRequest
@@ -565,7 +565,7 @@ public class PublisherController(
.Take(take) .Take(take)
.ToListAsync(); .ToListAsync();
return Ok(members); return Ok(await ps.LoadMemberAccounts(members));
} }
[HttpGet("{name}/members/me")] [HttpGet("{name}/members/me")]
@@ -586,7 +586,7 @@ public class PublisherController(
.FirstOrDefaultAsync(); .FirstOrDefaultAsync();
if (member is null) return NotFound(); if (member is null) return NotFound();
return Ok(member); return Ok(await ps.LoadMemberAccount(member));
} }
[HttpGet("{name}/features")] [HttpGet("{name}/features")]

View File

@@ -1,6 +1,7 @@
using DysonNetwork.Shared.Cache; using DysonNetwork.Shared.Cache;
using DysonNetwork.Shared.Data; using DysonNetwork.Shared.Data;
using DysonNetwork.Shared.Proto; using DysonNetwork.Shared.Proto;
using DysonNetwork.Shared.Registry;
using DysonNetwork.Sphere.Post; using DysonNetwork.Sphere.Post;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using NodaTime; using NodaTime;
@@ -10,7 +11,8 @@ namespace DysonNetwork.Sphere.Publisher;
public class PublisherService( public class PublisherService(
AppDatabase db, AppDatabase db,
FileReferenceService.FileReferenceServiceClient fileRefs, FileReferenceService.FileReferenceServiceClient fileRefs,
ICacheService cache ICacheService cache,
AccountClientHelper accountsHelper
) )
{ {
public async Task<Publisher?> GetPublisherByName(string name) public async Task<Publisher?> GetPublisherByName(string name)
@@ -376,4 +378,24 @@ public class PublisherService(
return member != null && member.Role >= requiredRole; return member != null && member.Role >= requiredRole;
} }
public async Task<PublisherMember> LoadMemberAccount(PublisherMember member)
{
var account = await accountsHelper.GetAccount(member.AccountId);
member.Account = Pass.Account.Account.FromProtoValue(account);
return member;
}
public async Task<List<PublisherMember>> LoadMemberAccounts(ICollection<PublisherMember> 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();
}
} }