pricing->extraPmCreditsFor($user); } /** * Bucht eine Extra-PM aus der Wallet. Wirft InsufficientCreditsException, * wenn das Guthaben nicht reicht (Signal für den Mini-Checkout). */ public function purchase(User $user): SinglePurchase { $credits = $this->priceCredits($user); return DB::transaction(function () use ($user, $credits): SinglePurchase { $purchase = $user->singlePurchases()->create([ 'type' => SinglePurchaseType::ExtraPm, 'status' => SinglePurchaseStatus::Paid, 'price_cents' => $credits * 100, 'currency' => config('billing.default_currency'), 'paid_at' => now(), ]); $this->wallet->debit( $user, $credits, 'Extra-PM ('.$user->currentTier()->label().')', $purchase, ); return $purchase; }); } }