single_purchases: type-ENUM um depublication erweitern

Die create-Migration baut das ENUM dynamisch aus
SinglePurchaseType::cases(); Datenbanken von vor dem T12-Case kannten
depublication daher nicht und der Depublikations-Checkout brach mit
"Data truncated for column 'type'" ab. Die Migration gleicht das ENUM
per MODIFY COLUMN auf den aktuellen Case-Stand ab (nur MySQL; frische
DBs bekommen die volle Liste ohnehin über die create-Migration).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Kevin Adametz 2026-07-07 14:51:56 +00:00
parent d7f17bbc76
commit 930760a056

View file

@ -0,0 +1,45 @@
<?php
use App\Enums\SinglePurchaseType;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
/**
* Die create-Migration baut das type-ENUM dynamisch aus
* SinglePurchaseType::cases() — Datenbanken, die vor dem
* Depublication-Case (T12) migriert wurden, kennen den Wert daher
* nicht ("Data truncated for column 'type'", QA-Befund 07.07.).
* Gleicht das ENUM auf den aktuellen Case-Stand ab; frische
* Datenbanken (u. a. SQLite-Tests) erhalten die volle Liste bereits
* über die create-Migration.
*/
return new class extends Migration
{
public function up(): void
{
if (DB::connection()->getDriverName() !== 'mysql') {
return;
}
DB::statement(sprintf(
'ALTER TABLE single_purchases MODIFY COLUMN `type` ENUM(%s) NOT NULL',
$this->enumList(),
));
}
public function down(): void
{
// Kein Rückbau: ein verengtes ENUM würde vorhandene
// Depublikations-Käufe abschneiden.
}
private function enumList(): string
{
$values = array_map(
static fn (SinglePurchaseType $type): string => $type->value,
SinglePurchaseType::cases(),
);
return "'".implode("','", $values)."'";
}
};