//
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("20260629142009_InitialCleanBaseline")]
partial class InitialCleanBaseline
{
///
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("CreatedFromIp")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
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.Property("UserAgent")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
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");
});
modelBuilder.Entity("Backend.Domain.Candidate", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("AcceptanceNote")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("AcceptanceStatus")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(30)
.HasColumnType("character varying(30)")
.HasDefaultValue("open");
b.Property("CategoryId")
.HasColumnType("integer");
b.Property("ChannelSlug")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("ClipCompilationPlatform")
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("ClipCompilationTitle")
.HasMaxLength(200)
.HasColumnType("character varying(200)");
b.Property("ClipCompilationUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ClipEmbedStatus")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(30)
.HasColumnType("character varying(30)")
.HasDefaultValue("unchecked");
b.Property("DisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("NominationTally")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasDefaultValue(0);
b.Property("Platform")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("StreamerIdentityId")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("CategoryId");
b.HasIndex("SeasonId");
b.HasIndex("StreamerIdentityId");
b.ToTable("Candidates");
});
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.Property("ViewerRangeMax")
.HasColumnType("integer");
b.Property("ViewerRangeMin")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("SeasonId", "Slug")
.IsUnique();
b.ToTable("Categories");
});
modelBuilder.Entity("Backend.Domain.ClipSubmission", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CandidateId")
.HasColumnType("integer");
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("CandidateId");
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("AvgViewers")
.HasColumnType("integer");
b.Property("CandidateId")
.HasColumnType("integer");
b.Property("CandidateText")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("CategoryGroupName")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(80)
.HasColumnType("character varying(80)")
.HasDefaultValue("");
b.Property("CategoryId")
.HasColumnType("integer");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("FollowersGained")
.HasColumnType("integer");
b.Property("HoursStreamed")
.HasColumnType("integer");
b.Property("HoursWatched")
.HasColumnType("integer");
b.Property("PeakViewers")
.HasColumnType("integer");
b.Property("ResolvedChannel")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("ResolvedPlatform")
.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("StreamUrl")
.HasMaxLength(300)
.HasColumnType("character varying(300)");
b.Property("StreamerIdentityId")
.HasColumnType("integer");
b.Property("SubmittedByTwitchId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SuggestedCategoryId")
.HasColumnType("integer");
b.Property("TrackerCheckedAt")
.HasColumnType("timestamp with time zone");
b.Property("TrackerStatus")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(40)
.HasColumnType("character varying(40)")
.HasDefaultValue("pending");
b.Property("TrackingFlagsJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("[]");
b.Property("TrackingReviewNote")
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property("TrackingReviewStatus")
.IsRequired()
.ValueGeneratedOnAdd()
.HasMaxLength(30)
.HasColumnType("character varying(30)")
.HasDefaultValue("clear");
b.Property("TrackingReviewedAt")
.HasColumnType("timestamp with time zone");
b.Property("TrackingReviewedByTwitchId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.HasKey("Id");
b.HasIndex("CandidateId");
b.HasIndex("CategoryId");
b.HasIndex("StreamerIdentityId");
b.HasIndex("SuggestedCategoryId");
b.HasIndex("SeasonId", "Status");
b.HasIndex("SeasonId", "CategoryGroupName", "Status");
b.HasIndex("SeasonId", "StreamerIdentityId", "CategoryGroupName");
b.ToTable("Nominations");
});
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("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("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("IsDemo")
.ValueGeneratedOnAdd()
.HasColumnType("boolean")
.HasDefaultValue(false);
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("ShowStartsAt")
.HasColumnType("time without time zone");
b.Property("SubcategoryTemplatesJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("[]");
b.Property("VotingEndsAt")
.HasColumnType("date");
b.Property("VotingStartsAt")
.HasColumnType("date");
b.Property("WinnersPublishedAt")
.HasColumnType("timestamp with time zone");
b.Property("WinnersPublishedByTwitchId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("WorkflowRulesJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("[]");
b.Property("Year")
.HasColumnType("integer");
b.HasKey("Id");
b.HasIndex("Year")
.IsUnique();
b.ToTable("Seasons");
});
modelBuilder.Entity("Backend.Domain.ShowactApplication", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("ArtistName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("ContactDiscord")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("ContactEmail")
.IsRequired()
.HasMaxLength(180)
.HasColumnType("character varying(180)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedFromIp")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("Description")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property("FieldResponsesJson")
.IsRequired()
.HasColumnType("text");
b.Property("PerformanceType")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("PlatformUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("ReferenceUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
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("TechnicalNotes")
.IsRequired()
.HasMaxLength(1000)
.HasColumnType("character varying(1000)");
b.Property("UserAgent")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.HasKey("Id");
b.HasIndex("SeasonId", "Status");
b.ToTable("ShowactApplications");
});
modelBuilder.Entity("Backend.Domain.SiteSettings", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("AwardsSectionDescription")
.IsRequired()
.HasColumnType("text");
b.Property("AwardsSectionTitle")
.IsRequired()
.HasColumnType("text");
b.Property("ClipAdminMenuVisible")
.HasColumnType("boolean");
b.Property("ClipReviewEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("boolean")
.HasDefaultValue(true);
b.Property("ClipSubmissionDisabledMessage")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("ClipSubmissionsEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("boolean")
.HasDefaultValue(false);
b.Property("ContactContent")
.IsRequired()
.HasColumnType("text");
b.Property("ContactUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("DemoLoginDisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("DemoLoginEmail")
.IsRequired()
.HasMaxLength(180)
.HasColumnType("character varying(180)");
b.Property("DemoLoginEnabled")
.HasColumnType("boolean");
b.Property("DemoLoginManagedByDatabase")
.HasColumnType("boolean");
b.Property("DemoLoginPasswordHash")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("DemoLoginPasswordSalt")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("DemoLoginTwitchUserId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
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("ImprintContent")
.IsRequired()
.HasColumnType("text");
b.Property("ImprintUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("MaintenanceMessage")
.IsRequired()
.HasMaxLength(600)
.HasColumnType("character varying(600)");
b.Property("MaintenanceModeEnabled")
.HasColumnType("boolean");
b.Property("MaintenanceTitle")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("NewsletterUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("NominationLinkBlacklistJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("[]");
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("RiskRulesJson")
.IsRequired()
.HasColumnType("text");
b.Property("SessionIdleTimeoutHours")
.ValueGeneratedOnAdd()
.HasColumnType("integer")
.HasDefaultValue(3);
b.Property("ShareDiscordUrl")
.IsRequired()
.HasColumnType("text");
b.Property("ShareXUrl")
.IsRequired()
.HasColumnType("text");
b.Property("ShowactApplicationDisabledMessage")
.IsRequired()
.HasMaxLength(240)
.HasColumnType("character varying(240)");
b.Property("ShowactApplicationEndsAt")
.HasColumnType("date");
b.Property("ShowactApplicationStartsAt")
.HasColumnType("date");
b.Property("ShowactApplicationsEnabled")
.ValueGeneratedOnAdd()
.HasColumnType("boolean")
.HasDefaultValue(false);
b.Property("ShowactFormSchemaJson")
.IsRequired()
.HasColumnType("text");
b.Property("ShowactsContent")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("");
b.Property("ShowactsUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("SocialLinksJson")
.IsRequired()
.HasColumnType("text");
b.Property("SponsorsContent")
.IsRequired()
.HasColumnType("text");
b.Property("SponsorsUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("SponsorsVisible")
.ValueGeneratedOnAdd()
.HasColumnType("boolean")
.HasDefaultValue(true);
b.Property("StreamBannerCompletedButtonLabel")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("StreamBannerCompletedButtonUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("StreamBannerCompletedEyebrow")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("StreamBannerCompletedText")
.IsRequired()
.HasColumnType("text");
b.Property("StreamBannerCompletedTitle")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("StreamBannerEyebrow")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("StreamBannerLiveButtonLabel")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("StreamBannerLiveButtonUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("StreamBannerLockedButtonLabel")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("StreamBannerText")
.IsRequired()
.HasColumnType("text");
b.Property("StreamBannerTitle")
.IsRequired()
.HasMaxLength(160)
.HasColumnType("character varying(160)");
b.Property("StreamBannerUseCompletedContent")
.HasColumnType("boolean");
b.Property("SubcategoriesSectionDescription")
.IsRequired()
.HasColumnType("text");
b.Property("SubcategoriesSectionTitle")
.IsRequired()
.HasColumnType("text");
b.Property("TrackingReviewNotes")
.IsRequired()
.HasColumnType("text");
b.Property("TrackingRulesJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("[]");
b.Property("TwitchAuthManagedByDatabase")
.HasColumnType("boolean");
b.Property("TwitchClientId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("TwitchClientSecret")
.IsRequired()
.HasMaxLength(180)
.HasColumnType("character varying(180)");
b.Property("TwitchRedirectUri")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("TwitchScope")
.IsRequired()
.HasMaxLength(300)
.HasColumnType("character varying(300)");
b.Property("ViewerStatsProviderBaseUrl")
.IsRequired()
.HasMaxLength(400)
.HasColumnType("character varying(400)");
b.Property("WorkflowRulesJson")
.IsRequired()
.ValueGeneratedOnAdd()
.HasColumnType("text")
.HasDefaultValue("[]");
b.HasKey("Id");
b.ToTable("SiteSettings");
});
modelBuilder.Entity("Backend.Domain.Sponsor", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("Description")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("IsVisible")
.HasColumnType("boolean");
b.Property("LogoUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.Property("Name")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("SeasonId")
.HasColumnType("integer");
b.Property("SortOrder")
.HasColumnType("integer");
b.Property("Tier")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property("WebsiteUrl")
.IsRequired()
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.HasKey("Id");
b.HasIndex("SeasonId", "IsVisible", "SortOrder");
b.ToTable("Sponsors");
});
modelBuilder.Entity("Backend.Domain.StreamerIdentity", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("DisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("LastResolvedAt")
.HasColumnType("timestamp with time zone");
b.Property("Login")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("NormalizedKey")
.IsRequired()
.HasMaxLength(180)
.HasColumnType("character varying(180)");
b.Property("Platform")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("ProfileUrl")
.HasMaxLength(500)
.HasColumnType("character varying(500)");
b.HasKey("Id");
b.HasIndex("NormalizedKey")
.IsUnique();
b.ToTable("StreamerIdentities");
});
modelBuilder.Entity("Backend.Domain.TeamMember", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("BoundTwitchDisplayName")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("BoundTwitchUserId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("CreatedAt")
.HasColumnType("timestamp with time zone");
b.Property("CreatedByTwitchId")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("DisplayName")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("IsActive")
.HasColumnType("boolean");
b.Property("LastLoginAt")
.HasColumnType("timestamp with time zone");
b.Property("Login")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("MustChangePassword")
.HasColumnType("boolean");
b.Property("PasswordHash")
.IsRequired()
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.Property("PasswordResetAt")
.HasColumnType("timestamp with time zone");
b.Property("PasswordSalt")
.IsRequired()
.HasMaxLength(80)
.HasColumnType("character varying(80)");
b.Property("Role")
.IsRequired()
.HasMaxLength(40)
.HasColumnType("character varying(40)");
b.Property("TwitchBoundAt")
.HasColumnType("timestamp with time zone");
b.Property("UpdatedAt")
.HasColumnType("timestamp with time zone");
b.Property("UpdatedByTwitchId")
.HasMaxLength(120)
.HasColumnType("character varying(120)");
b.HasKey("Id");
b.HasIndex("BoundTwitchUserId")
.IsUnique();
b.HasIndex("Login")
.IsUnique();
b.ToTable("TeamMembers");
});
modelBuilder.Entity("Backend.Domain.TeamRolePermission", b =>
{
b.Property("Id")
.ValueGeneratedOnAdd()
.HasColumnType("integer");
NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
b.Property("PermissionsJson")
.IsRequired()
.HasColumnType("text");
b.Property