👔 Optimize subscriptions logic
This commit is contained in:
@@ -197,7 +197,8 @@ public class SubscriptionGiftController(
|
|||||||
|
|
||||||
if (currentUser.Profile.Level < MinimumAccountLevel)
|
if (currentUser.Profile.Level < MinimumAccountLevel)
|
||||||
{
|
{
|
||||||
return StatusCode(403, "Account level must be at least 60 to purchase a gift.");
|
if (currentUser.PerkSubscription is null)
|
||||||
|
return StatusCode(403, "Account level must be at least 60 or a member of the Stellar Program to purchase a gift.");
|
||||||
}
|
}
|
||||||
|
|
||||||
Duration? giftDuration = null;
|
Duration? giftDuration = null;
|
||||||
|
@@ -250,6 +250,14 @@ public class SubscriptionService(
|
|||||||
: null;
|
: null;
|
||||||
if (subscriptionInfo is null) throw new InvalidOperationException("No matching subscription found.");
|
if (subscriptionInfo is null) throw new InvalidOperationException("No matching subscription found.");
|
||||||
|
|
||||||
|
if (subscriptionInfo.RequiredLevel > 0)
|
||||||
|
{
|
||||||
|
var profile = await db.AccountProfiles.FirstOrDefaultAsync(p => p.AccountId == subscription.AccountId);
|
||||||
|
if (profile is null) throw new InvalidOperationException("Account must have a profile");
|
||||||
|
if (profile.Level < subscriptionInfo.RequiredLevel)
|
||||||
|
throw new InvalidOperationException("Account level must be at least 60 to purchase a gift.");
|
||||||
|
}
|
||||||
|
|
||||||
return await payment.CreateOrderAsync(
|
return await payment.CreateOrderAsync(
|
||||||
null,
|
null,
|
||||||
subscriptionInfo.Currency,
|
subscriptionInfo.Currency,
|
||||||
@@ -684,6 +692,9 @@ public class SubscriptionService(
|
|||||||
if (now > gift.ExpiresAt)
|
if (now > gift.ExpiresAt)
|
||||||
throw new InvalidOperationException("Gift has expired.");
|
throw new InvalidOperationException("Gift has expired.");
|
||||||
|
|
||||||
|
if (gift.GifterId == redeemer.Id)
|
||||||
|
throw new InvalidOperationException("You cannot redeem your own gift.");
|
||||||
|
|
||||||
// Validate redeemer permissions
|
// Validate redeemer permissions
|
||||||
if (!gift.IsOpenGift && gift.RecipientId != redeemer.Id)
|
if (!gift.IsOpenGift && gift.RecipientId != redeemer.Id)
|
||||||
throw new InvalidOperationException("This gift is not intended for you.");
|
throw new InvalidOperationException("This gift is not intended for you.");
|
||||||
|
@@ -16,7 +16,7 @@ public class AutocompletionService(AppDatabase db, AccountClientHelper accountsH
|
|||||||
var afterAt = content[1..];
|
var afterAt = content[1..];
|
||||||
string type;
|
string type;
|
||||||
string query;
|
string query;
|
||||||
bool hadSlash = afterAt.Contains('/');
|
var hadSlash = afterAt.Contains('/');
|
||||||
if (hadSlash)
|
if (hadSlash)
|
||||||
{
|
{
|
||||||
var parts = afterAt.Split('/', 2);
|
var parts = afterAt.Split('/', 2);
|
||||||
|
Reference in New Issue
Block a user