Recht: Kuendigungsbutton nach Par. 312k BGB - Backend + Admin-Queue

Oeffentliche Bestaetigungsseite /de/kuendigung ohne Login: Art der
Kuendigung (Grund nur bei ausserordentlich), Zuordnungsdaten,
Beendigungszeitpunkt; Honeypot + Rate-Limit wie beim Widerruf.
Sofortige automatische Zugangsbestaetigung per E-Mail (Par. 312k
Abs. 4 BGB) + Betreiber-Mail. Kuendigungen laufen in der
Recht-&-Compliance-Queue unter den Widerrufen auf (K-Vorgaenge,
eigener Filter, Erledigt/Wieder-oeffnen, vierte KPI-Karte).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-03 11:32:43 +00:00
parent 239ec571bc
commit 1c3a52ae3c
12 changed files with 826 additions and 2 deletions

View file

@ -10,6 +10,7 @@ use App\Http\Controllers\Web\NewsroomsController;
use App\Http\Controllers\Web\PreiseController;
use App\Http\Controllers\Web\ReleaseDetailController;
use App\Http\Controllers\Web\SucheController;
use App\Http\Controllers\Web\TerminationController;
use App\Http\Controllers\Web\VeroeffentlichenController;
use App\Http\Middleware\SetEdition;
use App\Models\Category;
@ -205,6 +206,13 @@ Route::prefix('{edition}')->whereIn('edition', SetEdition::EDITIONS)->group(func
Route::view('presse', 'web.presse')->name('presse');
Route::view('hilfe', 'web.hilfe')->name('hilfe');
Route::view('impressum', 'web.impressum')->name('impressum');
// Gesetzlicher Kündigungsbutton (§ 312k BGB): öffentliche Bestätigungsseite
// + Eingang der Kündigungserklärung, ohne Login erreichbar.
Route::get('kuendigung', [TerminationController::class, 'show'])->name('kuendigung');
Route::post('kuendigung', [TerminationController::class, 'store'])
->middleware('throttle:10,1')
->name('kuendigung.store');
Route::view('datenschutz', 'web.datenschutz')->name('datenschutz');
Route::view('agb', 'web.agb')->name('agb');
Route::view('cookies', 'web.cookies')->name('cookies');