Files
vtuber-awards/Backend/Contracts/PublicOverviewContracts.cs
AzuTear 6b3b0360e7
CI - Build & Verify / Build, Typecheck & Hygiene (push) Successful in 1m1s
CI - Build & Verify / Deploy to award.noveria.net (push) Successful in 1m30s
Add winner archive, host image upload and live demo data
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>
2026-06-29 21:47:52 +02:00

115 lines
3.0 KiB
C#

namespace Backend.Contracts;
public sealed record TimelineItem(
string Key,
string Title,
DateOnly StartsAt,
DateOnly EndsAt,
string State);
public sealed record FeaturedCategoryDto(
int Id,
string GroupName,
string Name,
string Description,
int MaxNomineesPerUser);
public sealed record WinnerPreviewDto(
int Year,
string CategoryGroup,
string Category,
string WinnerName,
string WinnerSlug,
string WinnerPlatform,
string WinnerUrl,
string? ClipUrl,
string? ClipTitle,
string? ClipPlatform,
string? ClipEmbedStatus);
public sealed record ArchiveYearDto(
int Year,
int WinnerCount);
public sealed record FaqItemDto(string Question, string Answer);
public sealed record PublicSocialLinkDto(
string Label,
string Platform,
string Url,
string? Icon = null,
bool ShowOnHost = true,
bool ShowOnCommunity = true);
public sealed record FooterLinkDto(
string Key,
string Label,
string Url,
string Content);
public sealed record PublicStreamBannerContentDto(
string Eyebrow,
string Title,
string Text,
string LiveButtonLabel,
string LiveButtonUrl,
string LockedButtonLabel,
bool UseCompletedContent,
string CompletedEyebrow,
string CompletedTitle,
string CompletedText,
string CompletedButtonLabel,
string CompletedButtonUrl);
public sealed record PublicSiteContentDto(
string HostDisplayName,
string HostTagline,
string HostArtistName,
string HostImageUrl,
string NewsletterUrl,
string ShareXUrl,
string ShareDiscordUrl,
string PrivacyEmail,
string PrivacyPolicyContent,
string AwardsSectionTitle,
string AwardsSectionDescription,
string SubcategoriesSectionTitle,
string SubcategoriesSectionDescription,
PublicStreamBannerContentDto StreamBanner,
IEnumerable<PublicSocialLinkDto> SocialLinks,
IEnumerable<FooterLinkDto> FooterLinks);
public sealed record PublicSiteStatusResponse(
bool DemoLoginEnabled,
bool MaintenanceModeEnabled,
string MaintenanceTitle,
string MaintenanceMessage);
public sealed record PublicFeatureFlagsDto(
bool ClipSubmissionsEnabled,
bool ClipReviewEnabled,
string ClipSubmissionDisabledMessage,
bool ShowactApplicationsEnabled,
DateOnly? ShowactApplicationStartsAt,
DateOnly? ShowactApplicationEndsAt,
string ShowactApplicationDisabledMessage,
bool SponsorsVisible,
string ShowactFormSchemaJson);
public sealed record OverviewResponse(
int SeasonId,
int Year,
string Title,
DateOnly ShowDate,
TimeOnly ShowStartsAt,
string CurrentPhase,
bool IsCommunityOnly,
string LoginProvider,
IEnumerable<TimelineItem> Timeline,
IEnumerable<FeaturedCategoryDto> FeaturedCategories,
IEnumerable<WinnerPreviewDto> WinnersPreview,
IEnumerable<ArchiveYearDto> ArchiveYears,
PublicSiteContentDto SiteContent,
PublicFeatureFlagsDto FeatureFlags,
IEnumerable<FaqItemDto> Faq);