Recht: Online-Widerruf ohne Login (gesetzlicher Widerrufsbutton) - Backend

POST /widerruf (host-agnostisch, throttled, Honeypot, eigener
withdrawal-Error-Bag): persistiert nur Zuordnungsdaten (Name, E-Mail,
optionale Bestellnummer - KEIN Grund, darf nicht verlangt werden) und
versendet sofort die gesetzlich vorgeschriebene automatische
Eingangsbestaetigung mit Zeitstempel an den Verbraucher plus eine
interne Benachrichtigung an die Brand-Kontaktadresse des Hosts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-03 10:03:37 +00:00
parent 47d03ec777
commit 8c0bf00604
9 changed files with 429 additions and 0 deletions

View file

@ -0,0 +1,42 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
/**
* Online-Widerruf (gesetzlicher Widerrufsbutton): Verbraucher können Verträge
* ohne Login widerrufen. Nur Zuordnungsdaten (Name, E-Mail, optional
* Bestell-/Rechnungsnummer) — ein Widerrufsgrund darf nicht verlangt werden.
* Der Eingang wird sofort automatisch per E-Mail bestätigt; die Bearbeitung
* erfolgt manuell.
*/
return new class extends Migration
{
public function up(): void
{
Schema::create('withdrawal_requests', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email');
$table->string('order_reference')->nullable();
$table->string('host')->nullable();
$table->string('requester_ip', 45)->nullable();
$table->string('status', 40)->default('open');
$table->timestamp('resolved_at')->nullable();
$table->timestamps();
$table->index(['status', 'created_at']);
$table->index('email');
});
}
public function down(): void
{
Schema::dropIfExists('withdrawal_requests');
}
};