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:
parent
28de92e18b
commit
881a583bec
3 changed files with 50 additions and 13 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue