diff --git a/Backend/Migrations/20260629230000_SeedDemoArchivedWinners2025Force.cs b/Backend/Migrations/20260629230000_SeedDemoArchivedWinners2025Force.cs new file mode 100644 index 0000000..e118f22 --- /dev/null +++ b/Backend/Migrations/20260629230000_SeedDemoArchivedWinners2025Force.cs @@ -0,0 +1,66 @@ +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Backend.Migrations; + +[DbContext(typeof(Data.AwardsDbContext))] +[Migration("20260629230000_SeedDemoArchivedWinners2025Force")] +public partial class SeedDemoArchivedWinners2025Force : Migration +{ + protected override void Up(MigrationBuilder migrationBuilder) + { + // The original SeedDemoArchivedWinners2025 migration skipped seeding whenever + // any non-demo 2025 season row existed. Production carries empty 2025/2024 season + // shells (no published winners), so the archive stayed empty. Guard precisely on + // real published winner results instead, so the demo archive is populated unless + // genuine 2025 winners exist. + migrationBuilder.Sql( + """ + DO $vtsa_archive_2025_force$ + BEGIN + IF EXISTS ( + SELECT 1 + FROM "Results" r + JOIN "Seasons" s ON s."Id" = r."SeasonId" + WHERE s."Year" = 2025 AND s."WinnersPublishedAt" IS NOT NULL + ) THEN + RAISE NOTICE 'Echte veroeffentlichte 2025-Gewinner vorhanden; Demo-Archiv wird nicht eingespielt.'; + RETURN; + END IF; + + INSERT INTO "ArchivedWinners" ( + "Year", "Category", "Subcategory", "WinnerName", "WinnerUrl", "CreatedAt" + ) + VALUES + (2025, 'Gaming', 'Hidden Star', 'Archiv Aster', 'https://twitch.tv/archiv_aster', TIMESTAMPTZ '2025-06-22 10:05:00+00'), + (2025, 'Gaming', 'Rising Star', 'Archiv Beryl', 'https://twitch.tv/archiv_beryl', TIMESTAMPTZ '2025-06-22 10:06:00+00'), + (2025, 'Gaming', 'Shining Star', 'Archiv Coda', 'https://clips.twitch.tv/demo-archiv-coda', TIMESTAMPTZ '2025-06-22 10:07:00+00'), + (2025, 'Music', 'Hidden Star', 'Archiv Drift', 'https://twitch.tv/archiv_drift', TIMESTAMPTZ '2025-06-22 10:08:00+00'), + (2025, 'Music', 'Rising Star', 'Archiv Elara', 'https://youtu.be/demo-archiv-elara', TIMESTAMPTZ '2025-06-22 10:09:00+00'), + (2025, 'Music', 'Shining Star', 'Archiv Finch', 'https://clips.twitch.tv/demo-archiv-finch', TIMESTAMPTZ '2025-06-22 10:10:00+00'), + (2025, 'Community', 'Hidden Star', 'Archiv Lyra', 'https://twitch.tv/archiv_lyra', TIMESTAMPTZ '2025-06-22 10:11:00+00'), + (2025, 'Community', 'Rising Star', 'Archiv Muse', 'https://youtu.be/demo-archiv-muse', TIMESTAMPTZ '2025-06-22 10:12:00+00'), + (2025, 'Community', 'Shining Star', 'Archiv Nia', 'https://clips.twitch.tv/demo-archiv-nia', TIMESTAMPTZ '2025-06-22 10:13:00+00') + ON CONFLICT ("Year", "Category", "Subcategory") DO NOTHING; + + PERFORM setval(pg_get_serial_sequence('"ArchivedWinners"', 'Id'), COALESCE((SELECT MAX("Id") FROM "ArchivedWinners"), 1)); + END; + $vtsa_archive_2025_force$; + """ + ); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.Sql( + """ + DELETE FROM "ArchivedWinners" + WHERE "Year" = 2025 + AND "Category" IN ('Gaming', 'Music', 'Community') + AND "WinnerName" LIKE 'Archiv %'; + """ + ); + } +}