Files
chapter-organizer/Core/Entities/EventDefinition.cs
T
poprhythm c462ed4561 Enhance event definitions and parsing logic for new event types
Added new event definitions for "Meet the Candidates", "Chapter Officer Meeting", "Voting Delegate Meeting", and "Social Gathering". Updated the EventOccurrenceParser to handle these new event types and modified related services and views to accommodate the changes. Improved test coverage for the new event definitions and ensured proper parsing and display in the calendar components.
2025-12-27 19:32:54 -05:00

93 lines
3.0 KiB
C#

using System.ComponentModel.DataAnnotations;
namespace Core.Entities;
public class EventDefinition
{
public int Id { get; set; }
[Required]
[StringLength(100, MinimumLength = 2)]
[Display(Name = "Event Name")]
public string Name { get; set; } = null!;
[Required]
[StringLength(40, MinimumLength = 2)]
[Display(Name = "Event Short Name")]
public string? ShortName { get; set; }
[Required]
public EventFormat EventFormat { get; set; }
[Range(1, 6)]
public int MinTeamSize { get; set; }
[Range(1, 6)]
public int MaxTeamSize { get; set; }
public string TeamSize =>
MinTeamSize == MaxTeamSize
? MinTeamSize.ToString()
: $"{MinTeamSize.ToString()}-{MaxTeamSize.ToString()}";
[StringLength(100, MinimumLength = 3)]
public string? SemifinalistActivity { get; set; }
public bool InterviewOrPresentation
=> SemifinalistActivity != null && (SemifinalistActivity.Contains("Interview") || SemifinalistActivity.Contains("Presentation"));
public bool OnSiteActivity { get; set; }
//=> SemifinalistActivity != null
// && (SemifinalistActivity.Contains("Challenge")
// || SemifinalistActivity.Contains("Race")
// || SemifinalistActivity.Contains("Speech")
// || SemifinalistActivity.Contains("Test")
// || SemifinalistActivity.Contains("Flight")
// || Name.Contains("Leadership")
// || Name.Contains("Forensic")
// || Name.Contains("Flight")
// || Name.Contains("Coding")
// || SemifinalistActivity.Contains("Debate")
// || SemifinalistActivity.Contains("Photography")
// || SemifinalistActivity.Contains("Build")
// || Name.Contains("Chapter")
// || Name.Contains("Podcast"));
[StringLength(1024, MinimumLength = 3)]
public string? Notes { get; set; }
[Range(0, 3)]
public int ChapterEligibilityCountRegionals { get; set; }
[Range(1, 3)]
public int ChapterEligibilityCountState { get; set; }
public bool RegionalEvent => ChapterEligibilityCountRegionals > 0;
public bool Presubmission { get; set; }
[StringLength(64)]
public string? Documentation { get; set; }
[Required]
[StringLength(256)]
public string Eligibility { get; set; } = null!;
[StringLength(4096)]
public string? Theme { get; set; }
[StringLength(1024)]
public string? Description { get; set; }
public int? LevelOfEffort { get; set; }
public override string ToString()
{
return Name;
}
public static readonly EventDefinition GeneralSchedule = new(){Name = "General Schedule"};
public static readonly EventDefinition MeetTheCandidates = new(){Name = "Meet the Candidates"};
public static readonly EventDefinition ChapterOfficerMeeting = new(){Name = "Chapter Officer Meeting"};
public static readonly EventDefinition VotingDelegateMeeting = new(){Name = "Voting Delegate Meeting"};
public static readonly EventDefinition SocialGathering = new(){Name = "Social Gathering"};
}