diff --git a/.env.example b/.env.example index 2002df16..d66a920f 100644 --- a/.env.example +++ b/.env.example @@ -63,8 +63,11 @@ STRIPE_KEY= STRIPE_SECRET= STRIPE_WEBHOOK_SECRET= STRIPE_MINI_PRICE_ID= +STRIPE_MINI_PRICE_ID_EAP= STRIPE_PRO_PRICE_ID= +STRIPE_PRO_PRICE_ID_EAP= STRIPE_MAX_PRICE_ID= +STRIPE_MAX_PRICE_ID_EAP= STRIPE_FOREVER_PRICE_ID= STRIPE_TRIAL_PRICE_ID= STRIPE_MINI_PAYMENT_LINK= diff --git a/app/Enums/Subscription.php b/app/Enums/Subscription.php index d767f438..f336b0b5 100644 --- a/app/Enums/Subscription.php +++ b/app/Enums/Subscription.php @@ -26,9 +26,12 @@ public static function fromStripeSubscription(\Stripe\Subscription $subscription public static function fromStripePriceId(string $priceId): self { return match ($priceId) { - config('subscriptions.plans.mini.stripe_price_id') => self::Mini, - config('subscriptions.plans.pro.stripe_price_id') => self::Pro, - config('subscriptions.plans.max.stripe_price_id') => self::Max, + config('subscriptions.plans.mini.stripe_price_id'), + config('subscriptions.plans.mini.stripe_price_id_eap') => self::Mini, + config('subscriptions.plans.pro.stripe_price_id'), + config('subscriptions.plans.pro.stripe_price_id_eap') => self::Pro, + config('subscriptions.plans.max.stripe_price_id'), + config('subscriptions.plans.max.stripe_price_id_eap') => self::Max, default => throw new RuntimeException("Unknown Stripe price id: {$priceId}"), }; } @@ -52,7 +55,10 @@ public function name(): string public function stripePriceId(): string { - return config("subscriptions.plans.{$this->value}.stripe_price_id"); + // EAP ends June 1st at midnight UTC + return now()->isBefore('2025-06-01 00:00:00') + ? config("subscriptions.plans.{$this->value}.stripe_price_id_eap") + : config("subscriptions.plans.{$this->value}.stripe_price_id"); } public function stripePaymentLink(): string diff --git a/config/subscriptions.php b/config/subscriptions.php index ea97182f..2ab453dd 100644 --- a/config/subscriptions.php +++ b/config/subscriptions.php @@ -2,35 +2,38 @@ return [ 'plans' => [ - \App\Enums\Subscription::Mini->value => [ - 'name' => 'Early Access (Mini)', + 'mini' => [ + 'name' => 'Mini', 'stripe_price_id' => env('STRIPE_MINI_PRICE_ID'), + 'stripe_price_id_eap' => env('STRIPE_MINI_PRICE_ID_EAP'), 'stripe_payment_link' => env('STRIPE_MINI_PAYMENT_LINK'), 'anystack_product_id' => env('ANYSTACK_PRODUCT_ID'), 'anystack_policy_id' => env('ANYSTACK_MINI_POLICY_ID'), ], - \App\Enums\Subscription::Pro->value => [ - 'name' => 'Early Access (Pro)', + 'pro' => [ + 'name' => 'Pro', 'stripe_price_id' => env('STRIPE_PRO_PRICE_ID'), + 'stripe_price_id_eap' => env('STRIPE_PRO_PRICE_ID_EAP'), 'stripe_payment_link' => env('STRIPE_PRO_PAYMENT_LINK'), 'anystack_product_id' => env('ANYSTACK_PRODUCT_ID'), 'anystack_policy_id' => env('ANYSTACK_PRO_POLICY_ID'), ], - \App\Enums\Subscription::Max->value => [ - 'name' => 'Early Access (Max)', + 'max' => [ + 'name' => 'Max', 'stripe_price_id' => env('STRIPE_MAX_PRICE_ID'), + 'stripe_price_id_eap' => env('STRIPE_MAX_PRICE_ID_EAP'), 'stripe_payment_link' => env('STRIPE_MAX_PAYMENT_LINK'), 'anystack_product_id' => env('ANYSTACK_PRODUCT_ID'), 'anystack_policy_id' => env('ANYSTACK_MAX_POLICY_ID'), ], - \App\Enums\Subscription::Forever->value => [ + 'forever' => [ 'name' => 'Forever', 'stripe_price_id' => env('STRIPE_FOREVER_PRICE_ID'), 'stripe_payment_link' => env('STRIPE_FOREVER_PAYMENT_LINK'), 'anystack_product_id' => env('ANYSTACK_PRODUCT_ID'), 'anystack_policy_id' => env('ANYSTACK_FOREVER_POLICY_ID'), ], - \App\Enums\Subscription::Trial->value => [ + 'trial' => [ 'name' => 'Trial', 'stripe_price_id' => env('STRIPE_TRIAL_PRICE_ID'), 'stripe_payment_link' => env('STRIPE_TRIAL_PAYMENT_LINK'), diff --git a/phpunit.xml b/phpunit.xml index ab40d840..368547a6 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -33,6 +33,9 @@ + + +