b53c7fb736
Features: - Category viewer ranges + subcategory templates (admin group modal, tree workspace) - Nomination enrichment via TwitchTracker API (NominationEnrichmentService, TwitchTrackerViewerStatsProvider) with admin tracking rules editor - Nomination group tracker: CategoryGroupName as primary identifier, CategoryId stays as nullable legacy field; StreamerIdentity table - Dynamic showact application form builder (AdminShowactFormBuilder, ShowactApplicationSchedule) - Session idle timeout setting (AdminSessionTimeoutCard) - Share URLs for X and Discord (SiteSettings, public extras) - Workflow rules now stored per season (falls back to global SiteSettings) - New admin routes: settings/access, settings/workflows, tracking-rules - New admin review workspace with subcategory tabs - AdminCategoriesView rebuilt with group/subcategory modals Migrations (all additive): - AddShareUrls, AddShowactDynamicForm, AddCategoryViewerRanges, AddSessionIdleTimeoutSettings, AddSeasonSubcategoryTemplates, AddNominationGroupTrackerIdentity, AddShowactApplicationSchedule, AddSeasonWorkflowRulesJson Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
164 lines
4.8 KiB
C#
164 lines
4.8 KiB
C#
namespace Backend.Contracts;
|
|
|
|
public sealed record AdminSiteSettingsResponse(
|
|
string HostDisplayName,
|
|
string HostTagline,
|
|
string NewsletterUrl,
|
|
string ShareXUrl,
|
|
string ShareDiscordUrl,
|
|
string PrivacyEmail,
|
|
string PrivacyPolicyContent,
|
|
string? PrivacyPolicyUpdatedBy,
|
|
DateTimeOffset? PrivacyPolicyUpdatedAt,
|
|
string ImprintUrl,
|
|
string ImprintContent,
|
|
string ContactUrl,
|
|
string ContactContent,
|
|
string SponsorsUrl,
|
|
string SponsorsContent,
|
|
string ShowactsUrl,
|
|
string ShowactsContent,
|
|
IEnumerable<PublicSocialLinkDto> SocialLinks,
|
|
IEnumerable<FaqItemDto> Faq,
|
|
string ShowactFormSchemaJson);
|
|
|
|
public sealed record UpdateSiteSettingsRequest(
|
|
string HostDisplayName,
|
|
string HostTagline,
|
|
string NewsletterUrl,
|
|
string ShareXUrl,
|
|
string ShareDiscordUrl,
|
|
string PrivacyEmail,
|
|
string PrivacyPolicyContent,
|
|
string ImprintUrl,
|
|
string ImprintContent,
|
|
string ContactUrl,
|
|
string ContactContent,
|
|
string SponsorsUrl,
|
|
string SponsorsContent,
|
|
string ShowactsUrl,
|
|
string ShowactsContent,
|
|
PublicSocialLinkDto[] SocialLinks,
|
|
FaqItemDto[] Faq,
|
|
string? ShowactFormSchemaJson = null);
|
|
|
|
public sealed record AdminOperationalSettingsResponse(
|
|
bool DemoLoginManagedByDatabase,
|
|
bool DemoLoginEnabled,
|
|
string DemoLoginEmail,
|
|
bool DemoLoginPasswordSet,
|
|
string DemoLoginTwitchUserId,
|
|
string DemoLoginDisplayName,
|
|
bool TwitchAuthManagedByDatabase,
|
|
bool TwitchAuthConfigured,
|
|
string TwitchClientId,
|
|
bool TwitchClientSecretSet,
|
|
string TwitchRedirectUri,
|
|
string TwitchScope,
|
|
int SessionIdleTimeoutHours,
|
|
bool MaintenanceModeEnabled,
|
|
string MaintenanceTitle,
|
|
string MaintenanceMessage);
|
|
|
|
public sealed record AdminOptionalFeatureSettingsResponse(
|
|
bool ClipSubmissionsEnabled,
|
|
bool ClipReviewEnabled,
|
|
bool ClipAdminMenuVisible,
|
|
string ClipSubmissionDisabledMessage,
|
|
bool ShowactApplicationsEnabled,
|
|
DateOnly? ShowactApplicationStartsAt,
|
|
DateOnly? ShowactApplicationEndsAt,
|
|
bool ShowactApplicationsOpenNow,
|
|
string ShowactApplicationDisabledMessage,
|
|
bool SponsorsVisible);
|
|
|
|
public sealed record UpdateOptionalFeatureSettingsRequest(
|
|
bool ClipSubmissionsEnabled,
|
|
bool ClipReviewEnabled,
|
|
bool ClipAdminMenuVisible,
|
|
string ClipSubmissionDisabledMessage,
|
|
bool ShowactApplicationsEnabled,
|
|
DateOnly? ShowactApplicationStartsAt,
|
|
DateOnly? ShowactApplicationEndsAt,
|
|
string ShowactApplicationDisabledMessage,
|
|
bool SponsorsVisible);
|
|
|
|
public sealed record UpdateOperationalSettingsRequest(
|
|
bool DemoLoginEnabled,
|
|
string DemoLoginEmail,
|
|
string? DemoLoginPassword,
|
|
string DemoLoginTwitchUserId,
|
|
string DemoLoginDisplayName,
|
|
string TwitchClientId,
|
|
string? TwitchClientSecret,
|
|
string TwitchRedirectUri,
|
|
string TwitchScope,
|
|
int SessionIdleTimeoutHours,
|
|
bool MaintenanceModeEnabled,
|
|
string MaintenanceTitle,
|
|
string MaintenanceMessage);
|
|
|
|
public sealed record AdminTrackingSourceDto(
|
|
string ProviderKey,
|
|
string ProviderLabel,
|
|
string BaseUrl,
|
|
string NotesSummary,
|
|
bool ShowManualReviewNotesInReview);
|
|
|
|
public sealed record AdminTrackingMetricRuleDto(
|
|
string Key,
|
|
string Label,
|
|
bool Enabled,
|
|
string SourceSupport,
|
|
string Description,
|
|
bool RequiredForAutoClassification,
|
|
bool ShowInReview,
|
|
bool ShowInAdminSummary,
|
|
bool ManualOverrideAllowed,
|
|
string WindowKey,
|
|
string[] AutoSupportedWindowKeys,
|
|
string? ProviderFieldKey,
|
|
int? TopCount,
|
|
int? MinPrimaryCategorySharePercent,
|
|
int? MinPrimaryCategoryHours,
|
|
int? MaxDistinctCategoriesBeforeFlag,
|
|
string[] IgnoredCategories,
|
|
bool MatchAwardCategoryAgainstTopCategories,
|
|
bool FlagIfAwardCategoryNotInTopX,
|
|
bool FlagIfCategorySpreadTooWide,
|
|
bool FlagIfNoCategoryContextAvailable,
|
|
int? MinValue,
|
|
int? MaxValue);
|
|
|
|
public sealed record AdminTrackingFlagRuleDto(
|
|
string Key,
|
|
string Label,
|
|
bool Enabled,
|
|
string Severity,
|
|
string Description,
|
|
bool AutoTriggerEnabled,
|
|
bool RequiresManualReview,
|
|
bool BlocksApproval,
|
|
bool AdminNoteRequiredOnOverride);
|
|
|
|
public sealed record AdminTrackingRulesResponse(
|
|
AdminTrackingSourceDto Source,
|
|
AdminTrackingMetricRuleDto[] ImportantMetrics,
|
|
AdminTrackingMetricRuleDto[] OptionalMetrics,
|
|
AdminTrackingFlagRuleDto[] Flags,
|
|
string ManualReviewNotes);
|
|
|
|
public sealed record UpdateTrackingRulesRequest(
|
|
AdminTrackingSourceDto Source,
|
|
AdminTrackingMetricRuleDto[] ImportantMetrics,
|
|
AdminTrackingMetricRuleDto[] OptionalMetrics,
|
|
AdminTrackingFlagRuleDto[] Flags,
|
|
string ManualReviewNotes);
|
|
|
|
public sealed record UpdateTrackingSourceRequest(
|
|
AdminTrackingSourceDto Source);
|
|
|
|
public sealed record UpdateTrackingReviewNotesRequest(
|
|
string ManualReviewNotes,
|
|
bool ShowManualReviewNotesInReview);
|