neuer checkout-pfad: /de/bestellen/paketID und /en/checkout/PackageID
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
namespace App\Http\Controllers\Auth;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use App\Support\CheckoutRoutes;
|
||||
use Illuminate\Foundation\Auth\EmailVerificationRequest;
|
||||
use Illuminate\Http\RedirectResponse;
|
||||
|
||||
@@ -23,6 +24,7 @@ class VerifyEmailController extends Controller
|
||||
protected function redirectAfterVerification(EmailVerificationRequest $request): RedirectResponse
|
||||
{
|
||||
$redirectToCheckout = $request->session()->pull('checkout.verify_redirect');
|
||||
$preferredLocale = $request->session()->get('preferred_locale');
|
||||
|
||||
if (! $redirectToCheckout && $request->user()->pending_purchase) {
|
||||
$packageId = $request->session()->pull('checkout.pending_package_id');
|
||||
@@ -35,7 +37,7 @@ class VerifyEmailController extends Controller
|
||||
}
|
||||
|
||||
if ($packageId) {
|
||||
$redirectToCheckout = route('checkout.show', ['package' => $packageId]);
|
||||
$redirectToCheckout = CheckoutRoutes::wizardUrl($packageId, $preferredLocale);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@ use App\Models\AbandonedCheckout;
|
||||
use App\Models\Package;
|
||||
use App\Models\Tenant;
|
||||
use App\Models\User;
|
||||
use App\Support\CheckoutRoutes;
|
||||
use App\Support\Concerns\PresentsPackages;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
@@ -22,7 +23,7 @@ class CheckoutController extends Controller
|
||||
{
|
||||
use PresentsPackages;
|
||||
|
||||
public function show(Package $package)
|
||||
public function show(string $locale, string $checkoutSlug, Package $package): \Inertia\Response
|
||||
{
|
||||
$googleStatus = session()->pull('checkout_google_status');
|
||||
$googleError = session()->pull('checkout_google_error');
|
||||
@@ -52,7 +53,7 @@ class CheckoutController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
public function register(Request $request)
|
||||
public function register(Request $request): \Illuminate\Http\JsonResponse
|
||||
{
|
||||
$validator = Validator::make($request->all(), [
|
||||
'email' => 'required|email|max:255|unique:users,email',
|
||||
@@ -143,7 +144,7 @@ class CheckoutController extends Controller
|
||||
|
||||
Auth::login($user);
|
||||
$request->session()->put('checkout.pending_package_id', $package->id);
|
||||
$redirectUrl = route('checkout.show', ['package' => $package->id]);
|
||||
$redirectUrl = CheckoutRoutes::wizardUrl($package, $validated['locale'] ?? null);
|
||||
$request->session()->put('checkout.verify_redirect', $redirectUrl);
|
||||
$request->session()->put('url.intended', $redirectUrl);
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ namespace App\Http\Controllers;
|
||||
use App\Models\Package;
|
||||
use App\Models\Tenant;
|
||||
use App\Models\User;
|
||||
use App\Support\CheckoutRoutes;
|
||||
use App\Support\LocaleConfig;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
@@ -42,6 +44,7 @@ class CheckoutGoogleController extends Controller
|
||||
{
|
||||
$payload = $request->session()->get(self::SESSION_KEY, []);
|
||||
$packageId = $payload['package_id'] ?? null;
|
||||
$locale = $payload['locale'] ?? null;
|
||||
|
||||
try {
|
||||
$googleUser = Socialite::driver('google')->user();
|
||||
@@ -49,14 +52,14 @@ class CheckoutGoogleController extends Controller
|
||||
Log::warning('Google checkout login failed', ['message' => $e->getMessage()]);
|
||||
$this->flashError($request, __('checkout.google_error_fallback'));
|
||||
|
||||
return $this->redirectBackToWizard($packageId);
|
||||
return $this->redirectBackToWizard($packageId, $locale);
|
||||
}
|
||||
|
||||
$email = $googleUser->getEmail();
|
||||
if (! $email) {
|
||||
$this->flashError($request, __('checkout.google_missing_email'));
|
||||
|
||||
return $this->redirectBackToWizard($packageId);
|
||||
return $this->redirectBackToWizard($packageId, $locale);
|
||||
}
|
||||
|
||||
$raw = $googleUser->getRaw();
|
||||
@@ -83,7 +86,7 @@ class CheckoutGoogleController extends Controller
|
||||
|
||||
$request->session()->put('checkout_google_status', 'prefill');
|
||||
|
||||
return $this->redirectBackToWizard($packageId);
|
||||
return $this->redirectBackToWizard($packageId, $locale);
|
||||
}
|
||||
|
||||
$user = DB::transaction(function () use ($existing, $googleUser, $email) {
|
||||
@@ -114,7 +117,7 @@ class CheckoutGoogleController extends Controller
|
||||
$this->ensurePackageAttached($user, (int) $packageId);
|
||||
}
|
||||
|
||||
return $this->redirectBackToWizard($packageId);
|
||||
return $this->redirectBackToWizard($packageId, $locale);
|
||||
}
|
||||
|
||||
private function createTenantForUser(User $user, ?string $displayName, string $email): Tenant
|
||||
@@ -188,19 +191,19 @@ class CheckoutGoogleController extends Controller
|
||||
]);
|
||||
}
|
||||
|
||||
private function redirectBackToWizard(?int $packageId): RedirectResponse
|
||||
private function redirectBackToWizard(?int $packageId, ?string $locale = null): RedirectResponse
|
||||
{
|
||||
if ($packageId) {
|
||||
return redirect()->route('purchase.wizard', ['package' => $packageId]);
|
||||
return redirect()->to(CheckoutRoutes::wizardUrl($packageId, $locale));
|
||||
}
|
||||
|
||||
$firstPackageId = Package::query()->orderBy('price')->value('id');
|
||||
if ($firstPackageId) {
|
||||
return redirect()->route('purchase.wizard', ['package' => $firstPackageId]);
|
||||
return redirect()->to(CheckoutRoutes::wizardUrl($firstPackageId, $locale));
|
||||
}
|
||||
|
||||
return redirect()->route('packages', [
|
||||
'locale' => app()->getLocale(),
|
||||
'locale' => LocaleConfig::canonicalize($locale ?? app()->getLocale()),
|
||||
]);
|
||||
}
|
||||
|
||||
|
||||
28
app/Support/CheckoutRoutes.php
Normal file
28
app/Support/CheckoutRoutes.php
Normal file
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace App\Support;
|
||||
|
||||
use App\Models\Package;
|
||||
|
||||
class CheckoutRoutes
|
||||
{
|
||||
public static function slugForLocale(?string $locale = null): string
|
||||
{
|
||||
$normalized = LocaleConfig::canonicalize($locale ?? app()->getLocale());
|
||||
|
||||
return $normalized === 'en' ? 'checkout' : 'bestellen';
|
||||
}
|
||||
|
||||
public static function wizardUrl(Package|int $package, ?string $locale = null): string
|
||||
{
|
||||
$normalized = LocaleConfig::canonicalize($locale ?? app()->getLocale());
|
||||
$slug = self::slugForLocale($normalized);
|
||||
$packageId = $package instanceof Package ? $package->getKey() : $package;
|
||||
|
||||
return route('checkout.show', [
|
||||
'locale' => $normalized,
|
||||
'checkoutSlug' => $slug,
|
||||
'package' => $packageId,
|
||||
]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user