feat(db): auto-migrate 4 legacy macro settings to new assignment system
This commit is contained in:
parent
2b27aa50d5
commit
bf153b2906
|
|
@ -0,0 +1,72 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Database\Migrations\Migration;
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
return new class () extends Migration {
|
||||||
|
public function up(): void
|
||||||
|
{
|
||||||
|
$name = DB::table('settings')->where('key', 'macro_name')->value('value');
|
||||||
|
$uuid = DB::table('settings')->where('key', 'macro_uuid')->value('value');
|
||||||
|
|
||||||
|
if (empty($name) || empty($uuid)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
$collectionName = DB::table('settings')->where('key', 'macro_collection_name')->value('value');
|
||||||
|
$collectionUuid = DB::table('settings')->where('key', 'macro_collection_uuid')->value('value');
|
||||||
|
|
||||||
|
DB::transaction(function () use ($name, $uuid, $collectionName, $collectionUuid) {
|
||||||
|
$labelId = DB::table('labels')->insertGetId([
|
||||||
|
'name' => 'Copyright',
|
||||||
|
'color' => null,
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
$macroId = DB::table('macros')->insertGetId([
|
||||||
|
'uuid' => strtoupper($uuid),
|
||||||
|
'name' => $name,
|
||||||
|
'last_imported_filename' => 'legacy-settings-migration',
|
||||||
|
'last_imported_at' => now(),
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
if (! empty($collectionUuid) && ! empty($collectionName)) {
|
||||||
|
$collectionId = DB::table('macro_collections')->insertGetId([
|
||||||
|
'uuid' => strtoupper($collectionUuid),
|
||||||
|
'name' => $collectionName,
|
||||||
|
'last_imported_at' => now(),
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
]);
|
||||||
|
DB::table('macro_collection_macros')->insert([
|
||||||
|
'macro_collection_id' => $collectionId,
|
||||||
|
'macro_id' => $macroId,
|
||||||
|
'order' => 0,
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
DB::table('macro_assignments')->insert([
|
||||||
|
'part_type' => 'song',
|
||||||
|
'macro_id' => $macroId,
|
||||||
|
'position' => 'by_label',
|
||||||
|
'label_id' => $labelId,
|
||||||
|
'order' => 0,
|
||||||
|
'created_at' => now(),
|
||||||
|
'updated_at' => now(),
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::table('settings')
|
||||||
|
->whereIn('key', ['macro_name', 'macro_uuid', 'macro_collection_name', 'macro_collection_uuid'])
|
||||||
|
->delete();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public function down(): void
|
||||||
|
{
|
||||||
|
}
|
||||||
|
};
|
||||||
50
tests/Feature/Migrations/MigrateLegacyMacroSettingsTest.php
Normal file
50
tests/Feature/Migrations/MigrateLegacyMacroSettingsTest.php
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
use Illuminate\Support\Facades\DB;
|
||||||
|
|
||||||
|
test('migration is no-op when macro settings are empty', function () {
|
||||||
|
expect(DB::table('macro_assignments')->count())->toBe(0);
|
||||||
|
expect(DB::table('macros')->count())->toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('migration creates assignment when all 4 keys are present', function () {
|
||||||
|
DB::table('settings')->insert([
|
||||||
|
['key' => 'macro_name', 'value' => 'Copyright Makro', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
['key' => 'macro_uuid', 'value' => 'AAAAAAAA-1111-2222-3333-FFFFFFFFFFFF', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
['key' => 'macro_collection_name', 'value' => '--MAIN--', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
['key' => 'macro_collection_uuid', 'value' => '8D02FC57-83F8-4042-9B90-81C229728426', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$migration = require database_path('migrations/2026_05_03_100700_migrate_legacy_macro_settings.php');
|
||||||
|
$migration->up();
|
||||||
|
|
||||||
|
expect(DB::table('labels')->where('name', 'Copyright')->exists())->toBeTrue();
|
||||||
|
expect(DB::table('macros')->where('uuid', 'AAAAAAAA-1111-2222-3333-FFFFFFFFFFFF')->exists())->toBeTrue();
|
||||||
|
expect(DB::table('macro_assignments')->where('part_type', 'song')->where('position', 'by_label')->exists())->toBeTrue();
|
||||||
|
expect(DB::table('settings')->whereIn('key', ['macro_name', 'macro_uuid', 'macro_collection_name', 'macro_collection_uuid'])->count())->toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('migration works when only name and uuid are set (no collection)', function () {
|
||||||
|
DB::table('settings')->insert([
|
||||||
|
['key' => 'macro_name', 'value' => 'Simple Makro', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
['key' => 'macro_uuid', 'value' => 'BBBBBBBB-1111-2222-3333-FFFFFFFFFFFF', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$migration = require database_path('migrations/2026_05_03_100700_migrate_legacy_macro_settings.php');
|
||||||
|
$migration->up();
|
||||||
|
|
||||||
|
expect(DB::table('macro_assignments')->where('part_type', 'song')->exists())->toBeTrue();
|
||||||
|
expect(DB::table('macro_collections')->count())->toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('migration is no-op when macro_uuid is empty', function () {
|
||||||
|
DB::table('settings')->insert([
|
||||||
|
['key' => 'macro_name', 'value' => 'Makro Ohne UUID', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
['key' => 'macro_uuid', 'value' => '', 'created_at' => now(), 'updated_at' => now()],
|
||||||
|
]);
|
||||||
|
|
||||||
|
$migration = require database_path('migrations/2026_05_03_100700_migrate_legacy_macro_settings.php');
|
||||||
|
$migration->up();
|
||||||
|
|
||||||
|
expect(DB::table('macro_assignments')->count())->toBe(0);
|
||||||
|
});
|
||||||
Loading…
Reference in a new issue