Initial VTuber Awards implementation

This commit is contained in:
AzuTear
2026-06-17 11:35:45 +02:00
commit 670259a983
74 changed files with 15797 additions and 0 deletions
+11
View File
@@ -0,0 +1,11 @@
namespace Backend.Domain;
public sealed class AwardResult
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public int CandidateId { get; set; }
public Candidate Candidate { get; set; } = null!;
public string CategoryName { get; set; } = string.Empty;
}
+13
View File
@@ -0,0 +1,13 @@
namespace Backend.Domain;
public sealed class Candidate
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public int CategoryId { get; set; }
public Category Category { get; set; } = null!;
public string DisplayName { get; set; } = string.Empty;
public string ChannelSlug { get; set; } = string.Empty;
public string Platform { get; set; } = "Twitch";
}
+15
View File
@@ -0,0 +1,15 @@
namespace Backend.Domain;
public sealed class Category
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public string GroupName { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string Slug { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public int SortOrder { get; set; }
public int MaxNomineesPerUser { get; set; }
public ICollection<Candidate> Candidates { get; set; } = [];
}
+15
View File
@@ -0,0 +1,15 @@
namespace Backend.Domain;
public sealed class Nomination
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public int CategoryId { get; set; }
public Category Category { get; set; } = null!;
public string SubmittedByTwitchId { get; set; } = string.Empty;
public int? CandidateId { get; set; }
public Candidate? Candidate { get; set; }
public string? CandidateText { get; set; }
public DateTimeOffset CreatedAt { get; set; }
}
+20
View File
@@ -0,0 +1,20 @@
namespace Backend.Domain;
public sealed class Season
{
public int Id { get; set; }
public int Year { get; set; }
public string Name { get; set; } = string.Empty;
public bool IsCurrent { get; set; }
public bool IsCommunityOnly { get; set; }
public string CurrentPhase { get; set; } = string.Empty;
public DateOnly NominationStartsAt { get; set; }
public DateOnly NominationEndsAt { get; set; }
public DateOnly VotingStartsAt { get; set; }
public DateOnly VotingEndsAt { get; set; }
public DateOnly ReviewStartsAt { get; set; }
public DateOnly ReviewEndsAt { get; set; }
public DateOnly ShowDate { get; set; }
public ICollection<Category> Categories { get; set; } = [];
public ICollection<AwardResult> Results { get; set; } = [];
}
+13
View File
@@ -0,0 +1,13 @@
namespace Backend.Domain;
public sealed class UserSession
{
public Guid Id { get; set; }
public string SessionToken { get; set; } = string.Empty;
public string TwitchUserId { get; set; } = string.Empty;
public string DisplayName { get; set; } = string.Empty;
public string Role { get; set; } = "viewer";
public DateTimeOffset CreatedAt { get; set; }
public DateTimeOffset LastSeenAt { get; set; }
public bool IsActive { get; set; }
}
+12
View File
@@ -0,0 +1,12 @@
namespace Backend.Domain;
public sealed class VoteBallot
{
public int Id { get; set; }
public int SeasonId { get; set; }
public Season Season { get; set; } = null!;
public string SubmittedByTwitchId { get; set; } = string.Empty;
public string Status { get; set; } = "draft";
public DateTimeOffset SubmittedAt { get; set; }
public ICollection<VoteEntry> Entries { get; set; } = [];
}
+12
View File
@@ -0,0 +1,12 @@
namespace Backend.Domain;
public sealed class VoteEntry
{
public int Id { get; set; }
public int BallotId { get; set; }
public VoteBallot Ballot { get; set; } = null!;
public int CategoryId { get; set; }
public Category Category { get; set; } = null!;
public int CandidateId { get; set; }
public Candidate Candidate { get; set; } = null!;
}