🐛 Fix publisher members has no account info
This commit is contained in:
		@@ -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; }
 | 
			
		||||
 
 | 
			
		||||
@@ -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")]
 | 
			
		||||
 
 | 
			
		||||
@@ -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<Publisher?> GetPublisherByName(string name)
 | 
			
		||||
@@ -376,4 +378,24 @@ public class PublisherService(
 | 
			
		||||
 | 
			
		||||
        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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user