6b3b0360e7
Deliver the demo-ready feature set and seed data so the live site can be presented end to end: - Winner archive: ArchivedWinner domain, admin CRUD endpoints/view/manager and public archive surface, backed by AddArchivedWinners migration. - Host presentation: host image upload and artist name on SiteSettings with public image endpoint and supporting migrations. - Clip submissions: idempotent table-ensure migration plus current-season demo clips for review workflows. - Demo seed data: sponsors, share links and 2025 archived winners, with a guarded RemoveDemoSeasons cleanup; all seeds guard against real data. - EnsureRuntimeSchemaParity migration to align runtime schema defensively. - Admin/home UI refinements; remove unused team role permissions modal and dead share-quick-links code. All seed and schema migrations are idempotent (IF NOT EXISTS / ON CONFLICT) and skip when real season data is present. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
78 lines
4.8 KiB
C#
78 lines
4.8 KiB
C#
namespace Backend.Domain;
|
|
|
|
public sealed class SiteSettings
|
|
{
|
|
public int Id { get; set; }
|
|
public string HostDisplayName { get; set; } = string.Empty;
|
|
public string HostTagline { get; set; } = string.Empty;
|
|
public string HostArtistName { get; set; } = string.Empty;
|
|
public byte[]? HostImageData { get; set; }
|
|
public string? HostImageContentType { get; set; }
|
|
public DateTimeOffset? HostImageUpdatedAt { get; set; }
|
|
public string NewsletterUrl { get; set; } = string.Empty;
|
|
public string ShareXUrl { get; set; } = string.Empty;
|
|
public string ShareDiscordUrl { get; set; } = string.Empty;
|
|
public string PrivacyEmail { get; set; } = string.Empty;
|
|
public string PrivacyPolicyContent { get; set; } = string.Empty;
|
|
public string? PrivacyPolicyUpdatedBy { get; set; }
|
|
public DateTimeOffset? PrivacyPolicyUpdatedAt { get; set; }
|
|
public string ImprintUrl { get; set; } = string.Empty;
|
|
public string ImprintContent { get; set; } = string.Empty;
|
|
public string ContactUrl { get; set; } = string.Empty;
|
|
public string ContactContent { get; set; } = string.Empty;
|
|
public string SponsorsUrl { get; set; } = string.Empty;
|
|
public string SponsorsContent { get; set; } = string.Empty;
|
|
public string ShowactsUrl { get; set; } = string.Empty;
|
|
public string ShowactsContent { get; set; } = string.Empty;
|
|
public string StreamBannerEyebrow { get; set; } = "Das grosse Finale";
|
|
public string StreamBannerTitle { get; set; } = "Award-Show Finale";
|
|
public string StreamBannerText { get; set; } = string.Empty;
|
|
public string StreamBannerLiveButtonLabel { get; set; } = "Jetzt live · Zum Stream";
|
|
public string StreamBannerLiveButtonUrl { get; set; } = string.Empty;
|
|
public string StreamBannerLockedButtonLabel { get; set; } = "Stream noch gesperrt";
|
|
public bool StreamBannerUseCompletedContent { get; set; }
|
|
public string StreamBannerCompletedEyebrow { get; set; } = "Danke fürs Mitfiebern";
|
|
public string StreamBannerCompletedTitle { get; set; } = "Award-Show abgeschlossen";
|
|
public string StreamBannerCompletedText { get; set; } = "Die grosse Award-Show ist vorbei. Danke an alle, die live dabei waren.";
|
|
public string StreamBannerCompletedButtonLabel { get; set; } = "Highlights ansehen";
|
|
public string StreamBannerCompletedButtonUrl { get; set; } = string.Empty;
|
|
public string AwardsSectionTitle { get; set; } = string.Empty;
|
|
public string AwardsSectionDescription { get; set; } = string.Empty;
|
|
public string SubcategoriesSectionTitle { get; set; } = string.Empty;
|
|
public string SubcategoriesSectionDescription { get; set; } = string.Empty;
|
|
public string SocialLinksJson { get; set; } = "[]";
|
|
public string FaqJson { get; set; } = "[]";
|
|
public string RiskRulesJson { get; set; } = "[]";
|
|
public string WorkflowRulesJson { get; set; } = "[]";
|
|
public string TrackingRulesJson { get; set; } = "[]";
|
|
public string ViewerStatsProviderBaseUrl { get; set; } = string.Empty;
|
|
public string TrackingReviewNotes { get; set; } = string.Empty;
|
|
public string NominationLinkBlacklistJson { get; set; } = "[]";
|
|
public bool ClipSubmissionsEnabled { get; set; }
|
|
public bool ClipReviewEnabled { get; set; } = true;
|
|
public bool ClipAdminMenuVisible { get; set; } = true;
|
|
public string ClipSubmissionDisabledMessage { get; set; } = "Clip-Einreichungen sind aktuell geschlossen.";
|
|
public bool ShowactApplicationsEnabled { get; set; }
|
|
public DateOnly? ShowactApplicationStartsAt { get; set; }
|
|
public DateOnly? ShowactApplicationEndsAt { get; set; }
|
|
public string ShowactApplicationDisabledMessage { get; set; } = "Showact-Bewerbungen sind aktuell geschlossen.";
|
|
public string ShowactFormSchemaJson { get; set; } = "[]";
|
|
public bool SponsorsVisible { get; set; } = true;
|
|
public bool DemoLoginManagedByDatabase { get; set; }
|
|
public bool DemoLoginEnabled { get; set; }
|
|
public string DemoLoginEmail { get; set; } = string.Empty;
|
|
public string DemoLoginPasswordHash { get; set; } = string.Empty;
|
|
public string DemoLoginPasswordSalt { get; set; } = string.Empty;
|
|
public string DemoLoginTwitchUserId { get; set; } = "jayuhime_admin";
|
|
public string DemoLoginDisplayName { get; set; } = "Jayuhime Admin";
|
|
public bool TwitchAuthManagedByDatabase { get; set; }
|
|
public string TwitchClientId { get; set; } = string.Empty;
|
|
public string TwitchClientSecret { get; set; } = string.Empty;
|
|
public string TwitchRedirectUri { get; set; } = string.Empty;
|
|
public string TwitchScope { get; set; } = string.Empty;
|
|
public int SessionIdleTimeoutHours { get; set; } = 3;
|
|
public bool MaintenanceModeEnabled { get; set; }
|
|
public string MaintenanceTitle { get; set; } = "Sternenpause";
|
|
public string MaintenanceMessage { get; set; } = "Die Award-Galaxie wird gerade liebevoll poliert. Schau gleich wieder vorbei.";
|
|
}
|