//
using System;
using Backend.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Migrations;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
#nullable disable
namespace Backend.Migrations
{
[DbContext(typeof(AwardsDbContext))]
[Migration("20260623154438_AddPrivacyPolicyContentMetadata")]
partial class AddPrivacyPolicyContentMetadata
{
///
protected override void BuildTargetModel(ModelBuilder modelBuilder)
{
#pragma warning disable 612, 618
modelBuilder
.HasAnnotation("ProductVersion", "8.0.11")
.HasAnnotation("Relational:MaxIdentifierLength", 63);
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
modelBuilder.Entity("Backend.Domain.AdminAuditEntry", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("ActionType")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("AdminTwitchUserId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("EntityId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("EntityType")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("MetadataJson")
.IsRequired()
.HasColumnType("text");
b.Property("Summary")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.HasKey("Id");
b.ToTable("AdminAuditEntries");
});
modelBuilder.Entity("Backend.Domain.AwardResult", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CandidateId")
.HasColumnType("integer");
b.Property("CategoryId")
.HasColumnType("integer");
b.Property("CategoryName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SeasonId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CandidateId");
b.HasIndex("CategoryId");
b.HasIndex("SeasonId", "CategoryId")
.IsUnique();
b.ToTable("Results");
b.HasData(
new
{
Id = 1,
CandidateId = 8,
CategoryId = 5,
CategoryName = "VTuber des Jahres",
SeasonId = 2
},
new
{
Id = 2,
CandidateId = 9,
CategoryId = 6,
CategoryName = "Bestes Live Event",
SeasonId = 2
},
new
{
Id = 3,
CandidateId = 10,
CategoryId = 7,
CategoryName = "Clip des Jahres",
SeasonId = 2
},
new
{
Id = 4,
CandidateId = 11,
CategoryId = 8,
CategoryName = "VTuber des Jahres",
SeasonId = 3
},
new
{
Id = 5,
CandidateId = 12,
CategoryId = 9,
CategoryName = "Clip des Jahres",
SeasonId = 3
},
new
{
Id = 6,
CandidateId = 13,
CategoryId = 10,
CategoryName = "VTuber des Jahres",
SeasonId = 4
});
});
modelBuilder.Entity("Backend.Domain.Candidate", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CategoryId")
.HasColumnType("integer");
b.Property("ChannelSlug")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("DisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("Platform")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("SeasonId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.HasIndex("SeasonId");
b.ToTable("Candidates");
b.HasData(
new
{
Id = 1,
CategoryId = 1,
ChannelSlug = "@hoshimimiyu",
DisplayName = "Hoshimi Miyu",
Platform = "Twitch",
SeasonId = 1
},
new
{
Id = 2,
CategoryId = 1,
ChannelSlug = "@kurainu",
DisplayName = "Kurainu",
Platform = "Twitch",
SeasonId = 1
},
new
{
Id = 3,
CategoryId = 1,
ChannelSlug = "@shiroch",
DisplayName = "Shiro Ch.",
Platform = "Twitch",
SeasonId = 1
},
new
{
Id = 4,
CategoryId = 2,
ChannelSlug = "@kurainu",
DisplayName = "Kurainu 3D Live",
Platform = "Twitch",
SeasonId = 1
},
new
{
Id = 5,
CategoryId = 2,
ChannelSlug = "@aoisakura",
DisplayName = "Aoi Sakura Showcase",
Platform = "YouTube",
SeasonId = 1
},
new
{
Id = 6,
CategoryId = 3,
ChannelSlug = "@pyonkichikingdom",
DisplayName = "Pyonkichi Kingdom",
Platform = "Twitch",
SeasonId = 1
},
new
{
Id = 7,
CategoryId = 4,
ChannelSlug = "@moonrelay",
DisplayName = "Moonrelay",
Platform = "Twitch",
SeasonId = 1
},
new
{
Id = 8,
CategoryId = 5,
ChannelSlug = "@hoshimimiyu",
DisplayName = "Hoshimi Miyu",
Platform = "Twitch",
SeasonId = 2
},
new
{
Id = 9,
CategoryId = 6,
ChannelSlug = "@kurainu",
DisplayName = "Kurainu 3D Live",
Platform = "Twitch",
SeasonId = 2
},
new
{
Id = 10,
CategoryId = 7,
ChannelSlug = "@pyonkichikingdom",
DisplayName = "Pyonkichi Kingdom",
Platform = "Twitch",
SeasonId = 2
},
new
{
Id = 11,
CategoryId = 8,
ChannelSlug = "@aoisakura",
DisplayName = "Aoi Sakura",
Platform = "YouTube",
SeasonId = 3
},
new
{
Id = 12,
CategoryId = 9,
ChannelSlug = "@starbyte",
DisplayName = "Starbyte",
Platform = "Twitch",
SeasonId = 3
},
new
{
Id = 13,
CategoryId = 10,
ChannelSlug = "@tenshivox",
DisplayName = "Tenshi Vox",
Platform = "Twitch",
SeasonId = 4
});
});
modelBuilder.Entity("Backend.Domain.Category", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("Description")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("GroupName")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("MaxNomineesPerUser")
.HasColumnType("integer");
b.Property("Name")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("Slug")
.IsRequired()
.HasColumnType("text");
b.Property("SortOrder")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("SeasonId", "Slug")
.IsUnique();
b.ToTable("Categories");
b.HasData(
new
{
Id = 1,
Description = "Die groesste Auszeichnung des Jahres.",
GroupName = "Main Awards",
MaxNomineesPerUser = 3,
Name = "VTuber des Jahres",
SeasonId = 1,
Slug = "vtuber-des-jahres",
SortOrder = 1
},
new
{
Id = 2,
Description = "Events, Konzerte und 3D-Shows.",
GroupName = "Performance",
MaxNomineesPerUser = 3,
Name = "Bestes Live Event",
SeasonId = 1,
Slug = "bestes-live-event",
SortOrder = 2
},
new
{
Id = 3,
Description = "Der lustigste oder emotionalste Clip des Jahres.",
GroupName = "Clips & Highlights",
MaxNomineesPerUser = 3,
Name = "Clip des Jahres",
SeasonId = 1,
Slug = "clip-des-jahres",
SortOrder = 3
},
new
{
Id = 4,
Description = "Die aktivste und freundlichste Community.",
GroupName = "Main Awards",
MaxNomineesPerUser = 3,
Name = "Beste Community",
SeasonId = 1,
Slug = "beste-community",
SortOrder = 4
},
new
{
Id = 5,
Description = "Archivkategorie 2025.",
GroupName = "Main Awards",
MaxNomineesPerUser = 3,
Name = "VTuber des Jahres",
SeasonId = 2,
Slug = "vtuber-des-jahres",
SortOrder = 1
},
new
{
Id = 6,
Description = "Archivkategorie 2025.",
GroupName = "Performance",
MaxNomineesPerUser = 3,
Name = "Bestes Live Event",
SeasonId = 2,
Slug = "bestes-live-event",
SortOrder = 2
},
new
{
Id = 7,
Description = "Archivkategorie 2025.",
GroupName = "Clips & Highlights",
MaxNomineesPerUser = 3,
Name = "Clip des Jahres",
SeasonId = 2,
Slug = "clip-des-jahres",
SortOrder = 3
},
new
{
Id = 8,
Description = "Archivkategorie 2024.",
GroupName = "Main Awards",
MaxNomineesPerUser = 3,
Name = "VTuber des Jahres",
SeasonId = 3,
Slug = "vtuber-des-jahres",
SortOrder = 1
},
new
{
Id = 9,
Description = "Archivkategorie 2024.",
GroupName = "Clips & Highlights",
MaxNomineesPerUser = 3,
Name = "Clip des Jahres",
SeasonId = 3,
Slug = "clip-des-jahres",
SortOrder = 2
},
new
{
Id = 10,
Description = "Archivkategorie 2023.",
GroupName = "Main Awards",
MaxNomineesPerUser = 3,
Name = "VTuber des Jahres",
SeasonId = 4,
Slug = "vtuber-des-jahres",
SortOrder = 1
});
});
modelBuilder.Entity("Backend.Domain.ClipSubmission", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CategoryId")
.HasColumnType("integer");
b.Property("ClipUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedFromIp")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("Creator")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("Platform")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("ReviewNote")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ReviewedAt")
.HasColumnType("timestamp with time zone");
b.Property("ReviewedByTwitchId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("Status")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property("SubmittedByTwitchId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("Title")
.IsRequired()
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.HasKey("Id");
b.HasIndex("SeasonId", "Status");
b.ToTable("ClipSubmissions");
});
modelBuilder.Entity("Backend.Domain.Nomination", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CandidateId")
.HasColumnType("integer");
b.Property("CandidateText")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("CategoryId")
.HasColumnType("integer");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("ReviewNote")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ReviewedAt")
.HasColumnType("timestamp with time zone");
b.Property("ReviewedByTwitchId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("Status")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property("SubmittedByTwitchId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.HasKey("Id");
b.HasIndex("CandidateId");
b.HasIndex("CategoryId");
b.HasIndex("SeasonId", "Status");
b.ToTable("Nominations");
b.HasData(
new
{
Id = 1,
CandidateText = "Hoshimi Miyu",
CategoryId = 1,
CreatedAt = new DateTimeOffset(new DateTime(2026, 6, 10, 13, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
SeasonId = 1,
Status = "pending",
SubmittedByTwitchId = "twitch_hoshi"
},
new
{
Id = 2,
CandidateText = "Kurainu 3D Live",
CategoryId = 2,
CreatedAt = new DateTimeOffset(new DateTime(2026, 6, 10, 14, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
SeasonId = 1,
Status = "pending",
SubmittedByTwitchId = "twitch_kurainu"
});
});
modelBuilder.Entity("Backend.Domain.RiskFlag", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedFromIp")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("MetadataJson")
.IsRequired()
.HasColumnType("text");
b.Property("ReviewedAt")
.HasColumnType("timestamp with time zone");
b.Property("ReviewedByTwitchId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("Severity")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property("Source")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("Status")
.IsRequired()
.HasMaxLength(20)
.HasColumnType("character varying(20)");
b.Property("Summary")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("TwitchUserId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("Type")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("UserAgent")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.HasKey("Id");
b.HasIndex("SeasonId");
b.ToTable("RiskFlags");
});
modelBuilder.Entity("Backend.Domain.Season", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CurrentPhase")
.IsRequired()
.HasMaxLength(60)
.HasColumnType("character varying(60)");
b.Property("IsCommunityOnly")
.HasColumnType("boolean");
b.Property("IsCurrent")
.HasColumnType("boolean");
b.Property("Name")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("NominationEndsAt")
.HasColumnType("date");
b.Property("NominationStartsAt")
.HasColumnType("date");
b.Property("ReviewEndsAt")
.HasColumnType("date");
b.Property("ReviewStartsAt")
.HasColumnType("date");
b.Property("ShowDate")
.HasColumnType("date");
b.Property("ShowStreamUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("VotingEndsAt")
.HasColumnType("date");
b.Property("VotingStartsAt")
.HasColumnType("date");
b.Property("Year")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Year")
.IsUnique();
b.ToTable("Seasons");
b.HasData(
new
{
Id = 1,
CurrentPhase = "Community Voting",
IsCommunityOnly = true,
IsCurrent = true,
Name = "VTuber Star Awards 2026",
NominationEndsAt = new DateOnly(2026, 5, 31),
NominationStartsAt = new DateOnly(2026, 5, 1),
ReviewEndsAt = new DateOnly(2026, 7, 10),
ReviewStartsAt = new DateOnly(2026, 7, 1),
ShowDate = new DateOnly(2026, 7, 20),
ShowStreamUrl = "https://twitch.tv/jayuhime",
VotingEndsAt = new DateOnly(2026, 6, 30),
VotingStartsAt = new DateOnly(2026, 6, 1),
Year = 2026
},
new
{
Id = 2,
CurrentPhase = "Archived",
IsCommunityOnly = true,
IsCurrent = false,
Name = "VTuber Star Awards 2025",
NominationEndsAt = new DateOnly(2025, 5, 31),
NominationStartsAt = new DateOnly(2025, 5, 1),
ReviewEndsAt = new DateOnly(2025, 7, 10),
ReviewStartsAt = new DateOnly(2025, 7, 1),
ShowDate = new DateOnly(2025, 7, 20),
ShowStreamUrl = "https://twitch.tv/jayuhime",
VotingEndsAt = new DateOnly(2025, 6, 30),
VotingStartsAt = new DateOnly(2025, 6, 1),
Year = 2025
},
new
{
Id = 3,
CurrentPhase = "Archived",
IsCommunityOnly = true,
IsCurrent = false,
Name = "VTuber Star Awards 2024",
NominationEndsAt = new DateOnly(2024, 5, 31),
NominationStartsAt = new DateOnly(2024, 5, 1),
ReviewEndsAt = new DateOnly(2024, 7, 10),
ReviewStartsAt = new DateOnly(2024, 7, 1),
ShowDate = new DateOnly(2024, 7, 20),
ShowStreamUrl = "https://youtube.com/c/Jayuhime",
VotingEndsAt = new DateOnly(2024, 6, 30),
VotingStartsAt = new DateOnly(2024, 6, 1),
Year = 2024
},
new
{
Id = 4,
CurrentPhase = "Archived",
IsCommunityOnly = true,
IsCurrent = false,
Name = "VTuber Star Awards 2023",
NominationEndsAt = new DateOnly(2023, 5, 31),
NominationStartsAt = new DateOnly(2023, 5, 1),
ReviewEndsAt = new DateOnly(2023, 7, 10),
ReviewStartsAt = new DateOnly(2023, 7, 1),
ShowDate = new DateOnly(2023, 7, 20),
ShowStreamUrl = "https://twitch.tv/jayuhime",
VotingEndsAt = new DateOnly(2023, 6, 30),
VotingStartsAt = new DateOnly(2023, 6, 1),
Year = 2023
});
});
modelBuilder.Entity("Backend.Domain.SiteSettings", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("ContactUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("FaqJson")
.IsRequired()
.HasColumnType("text");
b.Property("HostDisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("HostTagline")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("ImprintUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("NewsletterUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("PrivacyEmail")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("PrivacyPolicyContent")
.IsRequired()
.HasColumnType("text");
b.Property("PrivacyPolicyUpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property("PrivacyPolicyUpdatedBy")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SocialLinksJson")
.IsRequired()
.HasColumnType("text");
b.Property("SponsorsUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.HasKey("Id");
b.ToTable("SiteSettings");
b.HasData(
new
{
Id = 1,
ContactUrl = "https://vtuber-star-awards.de/kontakt",
FaqJson = "[{\"question\":\"Wer darf mitmachen?\",\"answer\":\"Jede:r mit einem Twitch-Account. Einmal einloggen gen\\u00FCgt \\u2013 kein extra Konto, kein Papierkram.\"},{\"question\":\"Wie werden die Gewinner bestimmt?\",\"answer\":\"Komplett durch eure Stimmen. Die Community entscheidet, wer auf die B\\u00FChne darf.\"},{\"question\":\"Kann ich meine Wahl noch \\u00E4ndern?\",\"answer\":\"Ja. Bis zum Ende der Voting-Phase kannst du Nominierungen und Stimmen anpassen.\"},{\"question\":\"Wann und wo findet die Show statt?\",\"answer\":\"Die gro\\u00DFe Live-Show wird von Jayuhime gehostet und live auf den verkn\\u00FCpften Plattformen \\u00FCbertragen.\"}]",
HostDisplayName = "Jayuhime",
HostTagline = "VTuber & Award Host",
ImprintUrl = "https://vtuber-star-awards.de/impressum",
NewsletterUrl = "https://vtuber-star-awards.de/newsletter",
PrivacyEmail = "datenschutz@vtuber-star-awards.de",
PrivacyPolicyContent = "Verantwortliche:r\nVTuber Star Awards, vertreten durch Jayuhime. Kontakt: datenschutz@vtuber-star-awards.de\n\nWelche Daten wir verarbeiten\nBei Teilnahme (Voting, Nominierung, Clip-Einreichung) verarbeiten wir ausschließlich deine Twitch-User-ID sowie den Zeitstempel deiner Aktion.\nFür Show-Erinnerungen speichern wir optional deine E-Mail-Adresse.\n\nRechtsgrundlage\nVerarbeitung auf Basis von Art. 6 Abs. 1 lit. b DSGVO. Für optionale Erinnerungen gilt Art. 6 Abs. 1 lit. a DSGVO.\n\nZweck der Verarbeitung\nDurchführung des VTuber Star Awards, Sicherstellung fairer Abstimmung, Spam-Prävention sowie Admin-Review von Einreichungen.\n\nLöschfristen\nAlle Teilnahmedaten werden spätestens 6 Monate nach der Award-Show automatisch gelöscht. E-Mail-Adressen werden nach der Show entfernt.\n\nDeine Rechte\nDu hast das Recht auf Auskunft, Löschung, Berichtigung, Widerspruch und Beschwerde bei der zuständigen Aufsichtsbehörde.\n\nWeitergabe an Dritte\nKeine Weitergabe zu Werbezwecken. Technische Dienstleister verarbeiten Daten ausschließlich im Rahmen der Auftragsverarbeitung.",
PrivacyPolicyUpdatedAt = new DateTimeOffset(new DateTime(2026, 6, 23, 0, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
PrivacyPolicyUpdatedBy = "seed",
SocialLinksJson = "[{\"label\":\"Twitch\",\"platform\":\"twitch\",\"url\":\"https://twitch.tv/jayuhime\"},{\"label\":\"YouTube\",\"platform\":\"youtube\",\"url\":\"https://youtube.com/c/Jayuhime\"},{\"label\":\"X\",\"platform\":\"x\",\"url\":\"https://x.com/jayuhime\"},{\"label\":\"Instagram\",\"platform\":\"instagram\",\"url\":\"https://instagram.com/jayuhime\"},{\"label\":\"Discord\",\"platform\":\"discord\",\"url\":\"https://discord.gg/jayuhime\"}]",
SponsorsUrl = "https://vtuber-star-awards.de/partner"
});
});
modelBuilder.Entity("Backend.Domain.UserSession", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("uuid");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedFromIp")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("DisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("IsActive")
.HasColumnType("boolean");
b.Property("LastSeenAt")
.HasColumnType("timestamp with time zone");
b.Property("Role")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("SessionToken")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("TwitchUserId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("UserAgent")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.HasKey("Id");
b.HasIndex("SessionToken")
.IsUnique();
b.ToTable("UserSessions");
});
modelBuilder.Entity("Backend.Domain.VoteBallot", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("Status")
.IsRequired()
.HasMaxLength(30)
.HasColumnType("character varying(30)");
b.Property("SubmittedAt")
.HasColumnType("timestamp with time zone");
b.Property("SubmittedByTwitchId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.HasKey("Id");
b.HasIndex("SeasonId");
b.ToTable("VoteBallots");
b.HasData(
new
{
Id = 1,
SeasonId = 1,
Status = "submitted",
SubmittedAt = new DateTimeOffset(new DateTime(2026, 6, 11, 12, 0, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
SubmittedByTwitchId = "twitch_vote_1"
},
new
{
Id = 2,
SeasonId = 1,
Status = "submitted",
SubmittedAt = new DateTimeOffset(new DateTime(2026, 6, 11, 12, 5, 0, 0, DateTimeKind.Unspecified), new TimeSpan(0, 0, 0, 0, 0)),
SubmittedByTwitchId = "twitch_vote_2"
});
});
modelBuilder.Entity("Backend.Domain.VoteEntry", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("BallotId")
.HasColumnType("integer");
b.Property("CandidateId")
.HasColumnType("integer");
b.Property("CategoryId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("BallotId");
b.HasIndex("CandidateId");
b.HasIndex("CategoryId");
b.ToTable("VoteEntries");
b.HasData(
new
{
Id = 1,
BallotId = 1,
CandidateId = 1,
CategoryId = 1
},
new
{
Id = 2,
BallotId = 1,
CandidateId = 4,
CategoryId = 2
},
new
{
Id = 3,
BallotId = 2,
CandidateId = 2,
CategoryId = 1
},
new
{
Id = 4,
BallotId = 2,
CandidateId = 6,
CategoryId = 3
});
});
modelBuilder.Entity("Backend.Domain.AwardResult", b =>
{
b.HasOne("Backend.Domain.Candidate", "Candidate")
.WithMany()
.HasForeignKey("CandidateId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Backend.Domain.Category", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Backend.Domain.Season", "Season")
.WithMany("Results")
.HasForeignKey("SeasonId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Candidate");
b.Navigation("Category");
b.Navigation("Season");
});
modelBuilder.Entity("Backend.Domain.Candidate", b =>
{
b.HasOne("Backend.Domain.Category", "Category")
.WithMany("Candidates")
.HasForeignKey("CategoryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Backend.Domain.Season", "Season")
.WithMany()
.HasForeignKey("SeasonId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Category");
b.Navigation("Season");
});
modelBuilder.Entity("Backend.Domain.Category", b =>
{
b.HasOne("Backend.Domain.Season", "Season")
.WithMany("Categories")
.HasForeignKey("SeasonId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Season");
});
modelBuilder.Entity("Backend.Domain.Nomination", b =>
{
b.HasOne("Backend.Domain.Candidate", "Candidate")
.WithMany()
.HasForeignKey("CandidateId");
b.HasOne("Backend.Domain.Category", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Backend.Domain.Season", "Season")
.WithMany()
.HasForeignKey("SeasonId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Candidate");
b.Navigation("Category");
b.Navigation("Season");
});
modelBuilder.Entity("Backend.Domain.RiskFlag", b =>
{
b.HasOne("Backend.Domain.Season", "Season")
.WithMany()
.HasForeignKey("SeasonId");
b.Navigation("Season");
});
modelBuilder.Entity("Backend.Domain.VoteBallot", b =>
{
b.HasOne("Backend.Domain.Season", "Season")
.WithMany()
.HasForeignKey("SeasonId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Season");
});
modelBuilder.Entity("Backend.Domain.VoteEntry", b =>
{
b.HasOne("Backend.Domain.VoteBallot", "Ballot")
.WithMany("Entries")
.HasForeignKey("BallotId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Backend.Domain.Candidate", "Candidate")
.WithMany()
.HasForeignKey("CandidateId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.HasOne("Backend.Domain.Category", "Category")
.WithMany()
.HasForeignKey("CategoryId")
.OnDelete(DeleteBehavior.Cascade)
.IsRequired();
b.Navigation("Ballot");
b.Navigation("Candidate");
b.Navigation("Category");
});
modelBuilder.Entity("Backend.Domain.Category", b =>
{
b.Navigation("Candidates");
});
modelBuilder.Entity("Backend.Domain.Season", b =>
{
b.Navigation("Categories");
b.Navigation("Results");
});
modelBuilder.Entity("Backend.Domain.VoteBallot", b =>
{
b.Navigation("Entries");
});
#pragma warning restore 612, 618
}
}
}