From 6a24d07cec586696e5511c9922ad00d8bff911ca Mon Sep 17 00:00:00 2001 From: Leon Morival Date: Wed, 27 May 2026 10:31:34 +0200 Subject: [PATCH] feat: ensure stripe customer --- app/Http/Controllers/BillingController.php | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/BillingController.php b/app/Http/Controllers/BillingController.php index baaab2c..6c7d17d 100644 --- a/app/Http/Controllers/BillingController.php +++ b/app/Http/Controllers/BillingController.php @@ -29,6 +29,8 @@ class BillingController extends Controller abort_unless(filled($creditProduct->stripe_price_id), 404); $user = $request->user(); + $this->ensureStripeCustomer($user); + $metadata = [ 'credit_product_id' => $creditProduct->getKey(), 'credit_product_type' => $creditProduct->type->value, @@ -62,11 +64,25 @@ class BillingController extends Controller public function portal(Request $request): JsonResponse { + $user = $request->user(); + $this->ensureStripeCustomer($user); + + $portalUrl = $user->billingPortalUrl($this->redirectUrl('portal')); + return response()->json([ - 'url' => $request->user()->billingPortalUrl($this->redirectUrl('portal')), + 'url' => $portalUrl, ]); } + private function ensureStripeCustomer(mixed $user): void + { + if (! is_object($user) || ! method_exists($user, 'createOrGetStripeCustomer')) { + return; + } + + $user->createOrGetStripeCustomer(); + } + private function redirectUrl(string $status): string { $scheme = trim((string) config('app.mobile_scheme', env('APP_MOBILE_SCHEME', 'bowly')), ':/');