Depublikation: abgebrochener Checkout blockiert nicht mehr

Der Klick auf "Kostenpflichtig depublizieren" legte sofort einen
Pending-Kauf an; wer bei Stripe abbrach, sah danach dauerhaft "liegt
bereits ein Depublikations-Vorgang vor". Jetzt sperrt nur ein bezahlter
Vorgang — ein offener Pending-Kauf wird beim nächsten Klick
wiederverwendet (kein Duplikat), und die Detailseite zeigt das Angebot
weiterhin an.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-07 15:07:32 +00:00
parent 28de92e18b
commit 881a583bec
3 changed files with 50 additions and 13 deletions

View file

@ -206,19 +206,22 @@ class CheckoutController extends Controller
return $redirect;
}
// Doppelbuchungs-Bremse: eine offene oder bereits bezahlte
// Depublikation zu dieser PM reicht.
$alreadyRequested = SinglePurchase::query()
// Doppelbuchungs-Bremse: nur eine BEZAHLTE Depublikation blockiert.
// Ein offener Pending-Kauf (abgebrochener Stripe-Checkout) wird
// wiederverwendet, damit der Abbruch den Weg nicht dauerhaft
// versperrt (QA-Befund 07.07.).
$existing = SinglePurchase::query()
->where('press_release_id', $pressRelease->id)
->where('type', SinglePurchaseType::Depublication->value)
->whereIn('status', [SinglePurchaseStatus::Pending->value, SinglePurchaseStatus::Paid->value])
->exists();
->latest('id')
->first();
if ($alreadyRequested) {
if ($existing && $existing->status !== SinglePurchaseStatus::Pending) {
return $this->backToBookings(__('Für diese Pressemitteilung liegt bereits ein Depublikations-Vorgang vor.'));
}
$purchase = SinglePurchase::query()->create([
$purchase = $existing ?? SinglePurchase::query()->create([
'user_id' => $user->id,
'type' => SinglePurchaseType::Depublication->value,
'status' => SinglePurchaseStatus::Pending->value,