From 3c023a71b1e44e98fdc2d104396fe69755e52d90 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Tue, 23 Dec 2025 23:34:14 +0800 Subject: [PATCH] :sparkles: Subscription listing pagination & categories one --- .../PublisherSubscriptionController.cs | 55 ++++++++++++++++++- 1 file changed, 52 insertions(+), 3 deletions(-) diff --git a/DysonNetwork.Sphere/Publisher/PublisherSubscriptionController.cs b/DysonNetwork.Sphere/Publisher/PublisherSubscriptionController.cs index a195d23..b656fc3 100644 --- a/DysonNetwork.Sphere/Publisher/PublisherSubscriptionController.cs +++ b/DysonNetwork.Sphere/Publisher/PublisherSubscriptionController.cs @@ -91,11 +91,60 @@ public class PublisherSubscriptionController( /// List of active subscriptions [HttpGet("subscriptions")] [Authorize] - public async Task>> GetCurrentSubscriptions() + public async Task>> GetCurrentSubscriptions( + [FromQuery] int offset = 0, + [FromQuery] int take = 20 + ) { if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); + var accountId = Guid.Parse(currentUser.Id); - var subscriptions = await subs.GetAccountSubscriptionsAsync(Guid.Parse(currentUser.Id)); - return subscriptions; + var pubQuery = db.PublisherSubscriptions + .Include(ps => ps.Publisher) + .Where(ps => ps.AccountId == accountId && ps.Status == PublisherSubscriptionStatus.Active) + .OrderByDescending(ps => ps.CreatedAt) + .AsQueryable(); + + var totalCount = await pubQuery.CountAsync(); + var subscriptions = await pubQuery + .Take(take) + .Skip(offset) + .ToListAsync(); + + Response.Headers["X-Total"] = totalCount.ToString(); + + return Ok(subscriptions); + } + + /// + /// Get all subscriptions of categories and tags for the current user + /// + /// List of active subscription + [HttpGet("subscriptions/categories")] + [Authorize] + public async Task>> ListCategoriesSubscription( + [FromQuery] int offset = 0, + [FromQuery] int take = 20 + ) + { + if (HttpContext.Items["CurrentUser"] is not Account currentUser) return Unauthorized(); + var accountId = Guid.Parse(currentUser.Id); + + var pubQuery = db.PostCategorySubscriptions + .Include(ps => ps.Tag) + .Include(ps => ps.Category) + .Where(ps => ps.AccountId == accountId) + .OrderByDescending(ps => ps.CreatedAt) + .AsQueryable(); + + var totalCount = await pubQuery.CountAsync(); + var subscriptions = await pubQuery + .Take(take) + .Skip(offset) + .ToListAsync(); + + Response.Headers["X-Total"] = totalCount.ToString(); + + return Ok(subscriptions); } } \ No newline at end of file