feat: clean credits users
CI / 🧪 Tests Laravel (push) Successful in 2m0s
CI / 🐳 Build & Push Image (push) Successful in 35s

This commit is contained in:
2026-08-07 15:32:40 +02:00
parent eac86afa53
commit 68560655f3
44 changed files with 417 additions and 661 deletions
+15 -15
View File
@@ -3,8 +3,8 @@
namespace App\Http\Controllers;
use App\Enums\BillingProductPurpose;
use App\Http\Resources\CreditProductResource;
use App\Models\CreditProduct;
use App\Http\Resources\BillingProductResource;
use App\Models\BillingProduct;
use App\Services\MobileDeepLink;
use App\Services\PaymentTransactionRecorder;
use Illuminate\Http\JsonResponse;
@@ -16,7 +16,7 @@ class BillingController extends Controller
{
public function products(): AnonymousResourceCollection
{
$products = CreditProduct::query()
$products = BillingProduct::query()
->active()
->whereNotNull('purpose')
->whereNotNull('stripe_price_id')
@@ -24,33 +24,33 @@ class BillingController extends Controller
->orderBy('amount')
->get();
return CreditProductResource::collection($products);
return BillingProductResource::collection($products);
}
public function checkout(
Request $request,
CreditProduct $creditProduct,
BillingProduct $billingProduct,
PaymentTransactionRecorder $transactions,
): JsonResponse {
abort_unless($creditProduct->is_active, 404);
abort_unless($creditProduct->purpose !== null, 404);
abort_unless(filled($creditProduct->stripe_price_id), 404);
abort_unless($billingProduct->is_active, 404);
abort_unless($billingProduct->purpose !== null, 404);
abort_unless(filled($billingProduct->stripe_price_id), 404);
$user = $request->user();
$this->ensureStripeCustomer($user);
$metadata = [
'credit_product_id' => $creditProduct->getKey(),
'billing_product_purpose' => $creditProduct->purpose->value,
'billing_product_id' => $billingProduct->getKey(),
'billing_product_purpose' => $billingProduct->purpose->value,
];
$sessionOptions = [
'success_url' => $this->redirectUrl('success'),
'cancel_url' => $this->redirectUrl('cancel'),
'metadata' => $metadata,
'client_reference_id' => $creditProduct->getKey(),
'client_reference_id' => $billingProduct->getKey(),
];
if ($creditProduct->purpose === BillingProductPurpose::SUBSCRIPTION) {
if ($billingProduct->purpose === BillingProductPurpose::SUBSCRIPTION) {
if ($user->subscribed('default')) {
return response()->json([
'message' => __('api.billing.active_subscription_exists'),
@@ -58,7 +58,7 @@ class BillingController extends Controller
}
$checkout = $user
->newSubscription('default', $creditProduct->stripe_price_id)
->newSubscription('default', $billingProduct->stripe_price_id)
->withMetadata($metadata)
->checkout($sessionOptions);
} else {
@@ -76,7 +76,7 @@ class BillingController extends Controller
];
$checkout = $user->checkout([
$creditProduct->stripe_price_id => 1,
$billingProduct->stripe_price_id => 1,
], $sessionOptions);
}
@@ -84,7 +84,7 @@ class BillingController extends Controller
$transactions->recordCheckoutSession(
user: $user,
product: $creditProduct,
product: $billingProduct,
stripeCheckoutSessionId: $session->id,
stripeCustomerId: $session->customer,
amount: $session->amount_total,