From b0b7afd6b343fd6fe4b72960ed78918b06a98ccd Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Sat, 28 Jun 2025 18:13:32 +0800 Subject: [PATCH] :sparkles: Publisher members APIs --- .../Publisher/PublisherController.cs | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/DysonNetwork.Sphere/Publisher/PublisherController.cs b/DysonNetwork.Sphere/Publisher/PublisherController.cs index e35f151..1e95e29 100644 --- a/DysonNetwork.Sphere/Publisher/PublisherController.cs +++ b/DysonNetwork.Sphere/Publisher/PublisherController.cs @@ -376,7 +376,8 @@ public class PublisherController( // Remove old references for the publisher background if (publisher.Background is not null) { - await fileRefService.DeleteResourceReferencesAsync(publisher.ResourceIdentifier, "publisher.background"); + await fileRefService.DeleteResourceReferencesAsync(publisher.ResourceIdentifier, + "publisher.background"); } publisher.Background = background.ToReferenceObject(); @@ -437,4 +438,34 @@ public class PublisherController( return NoContent(); } -} + + [HttpGet("{name}/members")] + public async Task>> ListMembers( + string name, + [FromQuery] int offset = 0, + [FromQuery] int take = 20 + ) + { + var publisher = await db.Publishers + .Where(p => p.Name == name) + .FirstOrDefaultAsync(); + if (publisher is null) return NotFound(); + + IQueryable query = db.PublisherMembers + .Where(m => m.PublisherId == publisher.Id) + .Where(m => m.JoinedAt != null) + .Include(m => m.Account) + .Include(m => m.Account.Profile); + + var total = await query.CountAsync(); + Response.Headers["X-Total"] = total.ToString(); + + var members = await query + .OrderBy(m => m.CreatedAt) + .Skip(offset) + .Take(take) + .ToListAsync(); + + return Ok(members); + } +} \ No newline at end of file