Subscription and stellar program

This commit is contained in:
2025-06-22 17:57:19 +08:00
parent 9fd6016308
commit 698442ad13
10 changed files with 296 additions and 21 deletions

View File

@ -66,7 +66,7 @@ public class PublisherMember : ModelBase
public Instant? JoinedAt { get; set; }
}
public enum SubscriptionStatus
public enum PublisherSubscriptionStatus
{
Active,
Expired,
@ -82,7 +82,7 @@ public class PublisherSubscription : ModelBase
public Guid AccountId { get; set; }
[JsonIgnore] public Account.Account Account { get; set; } = null!;
public SubscriptionStatus Status { get; set; } = SubscriptionStatus.Active;
public PublisherSubscriptionStatus Status { get; set; } = PublisherSubscriptionStatus.Active;
public int Tier { get; set; } = 0;
}

View File

@ -102,7 +102,7 @@ public class PublisherService(AppDatabase db, FileReferenceService fileRefServic
// If not in cache, fetch from a database
var publishersId = await db.PublisherSubscriptions
.Where(p => p.AccountId == userId)
.Where(p => p.Status == SubscriptionStatus.Active)
.Where(p => p.Status == PublisherSubscriptionStatus.Active)
.Select(p => p.PublisherId)
.ToListAsync();
publishers = await db.Publishers

View File

@ -26,7 +26,7 @@ public class PublisherSubscriptionService(
return await db.PublisherSubscriptions
.AnyAsync(ps => ps.AccountId == accountId &&
ps.PublisherId == publisherId &&
ps.Status == SubscriptionStatus.Active);
ps.Status == PublisherSubscriptionStatus.Active);
}
/// <summary>
@ -52,7 +52,7 @@ public class PublisherSubscriptionService(
var subscribers = await db.PublisherSubscriptions
.Include(p => p.Account)
.Where(p => p.PublisherId == post.PublisherId &&
p.Status == SubscriptionStatus.Active)
p.Status == PublisherSubscriptionStatus.Active)
.ToListAsync();
if (subscribers.Count == 0)
return 0;
@ -105,7 +105,7 @@ public class PublisherSubscriptionService(
{
return await db.PublisherSubscriptions
.Include(ps => ps.Publisher)
.Where(ps => ps.AccountId == accountId && ps.Status == SubscriptionStatus.Active)
.Where(ps => ps.AccountId == accountId && ps.Status == PublisherSubscriptionStatus.Active)
.ToListAsync();
}
@ -118,7 +118,7 @@ public class PublisherSubscriptionService(
{
return await db.PublisherSubscriptions
.Include(ps => ps.Account)
.Where(ps => ps.PublisherId == publisherId && ps.Status == SubscriptionStatus.Active)
.Where(ps => ps.PublisherId == publisherId && ps.Status == PublisherSubscriptionStatus.Active)
.ToListAsync();
}
@ -141,8 +141,8 @@ public class PublisherSubscriptionService(
if (existingSubscription != null)
{
// If it exists but is not active, reactivate it
if (existingSubscription.Status == SubscriptionStatus.Active) return existingSubscription;
existingSubscription.Status = SubscriptionStatus.Active;
if (existingSubscription.Status == PublisherSubscriptionStatus.Active) return existingSubscription;
existingSubscription.Status = PublisherSubscriptionStatus.Active;
existingSubscription.Tier = tier;
await db.SaveChangesAsync();
@ -156,7 +156,7 @@ public class PublisherSubscriptionService(
{
AccountId = accountId,
PublisherId = publisherId,
Status = SubscriptionStatus.Active,
Status = PublisherSubscriptionStatus.Active,
Tier = tier,
};
@ -177,10 +177,10 @@ public class PublisherSubscriptionService(
public async Task<bool> CancelSubscriptionAsync(Guid accountId, Guid publisherId)
{
var subscription = await GetSubscriptionAsync(accountId, publisherId);
if (subscription is not { Status: SubscriptionStatus.Active })
if (subscription is not { Status: PublisherSubscriptionStatus.Active })
return false;
subscription.Status = SubscriptionStatus.Cancelled;
subscription.Status = PublisherSubscriptionStatus.Cancelled;
await db.SaveChangesAsync();
await cache.RemoveAsync(string.Format(PublisherService.SubscribedPublishersCacheKey, accountId));