🐛 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; }
|
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; }
|
||||||
|
@@ -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")]
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
Reference in New Issue
Block a user