Add Blazor WebApp and rework data handling to utilize Entity Framework
This commit is contained in:
+35
-41
@@ -1,40 +1,44 @@
|
||||
using System.Reflection;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
|
||||
namespace Core.Entities;
|
||||
|
||||
public class Team
|
||||
{
|
||||
public string Name { get; }
|
||||
public CompetitiveEvent Event { get; }
|
||||
public IList<Student> Students { get; }
|
||||
public int Id { get; set; }
|
||||
|
||||
public Student? Captain { get; set; }
|
||||
[Required]
|
||||
[Display(Name = "Team Name")]
|
||||
public string Name { get; set; }
|
||||
public EventDefinition Event { get; set; }
|
||||
public List<Student> Students { get; set; } = [];
|
||||
|
||||
public string TeamNumber { get; set; }
|
||||
public Student? Captain { get; set; }
|
||||
|
||||
public string RegionalTimeSlot { get; set; }
|
||||
[Display(Name = "Team Id")]
|
||||
public string? TeamId { get; set; }
|
||||
|
||||
public Tuple<DateTime,DateTime?>? RegionalTimeSlotObj
|
||||
{
|
||||
get
|
||||
{
|
||||
//public string? RegionalTimeSlot { get; set; }
|
||||
|
||||
|
||||
// public Tuple<DateTime,DateTime?>? RegionalTimeSlotObj
|
||||
//{
|
||||
// get
|
||||
// {
|
||||
|
||||
if (string.IsNullOrEmpty(RegionalTimeSlot))
|
||||
return null;
|
||||
var times = Regex.Matches(RegionalTimeSlot, @"(.*)\s*-\s*(.*)");
|
||||
if (times.Count == 0)
|
||||
return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null);
|
||||
var match = times[0];
|
||||
if (!match.Success)
|
||||
return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null);
|
||||
// if (string.IsNullOrEmpty(RegionalTimeSlot))
|
||||
// return null;
|
||||
// var times = Regex.Matches(RegionalTimeSlot, @"(.*)\s*-\s*(.*)");
|
||||
// if (times.Count == 0)
|
||||
// return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null);
|
||||
// var match = times[0];
|
||||
// if (!match.Success)
|
||||
// return Tuple.Create(P(RegionalTimeSlot), (DateTime?)null);
|
||||
|
||||
return Tuple.Create(P(match.Groups[1].Value), (DateTime?)P(match.Groups[2].Value));
|
||||
return null;
|
||||
}
|
||||
}
|
||||
// return Tuple.Create(P(match.Groups[1].Value), (DateTime?)P(match.Groups[2].Value));
|
||||
// return null;
|
||||
// }
|
||||
//}
|
||||
|
||||
private DateTime P(string s)
|
||||
private DateTime P(string s)
|
||||
{
|
||||
var dt = DateTime.Parse(s);
|
||||
if (dt.TimeOfDay < TimeSpan.FromHours(7))
|
||||
@@ -42,28 +46,18 @@ public class Team
|
||||
return dt;
|
||||
}
|
||||
|
||||
public Team(string name, CompetitiveEvent @event, IList<Student> students, Student? captain = null, string teamNumber = null, string regionalTimeSlot = null)
|
||||
{
|
||||
Name = name;
|
||||
Event = @event;
|
||||
Students = students;
|
||||
Captain = captain;
|
||||
TeamNumber = teamNumber;
|
||||
RegionalTimeSlot = regionalTimeSlot;
|
||||
}
|
||||
|
||||
public virtual Team CloneWithOmittedStudents(IEnumerable<Student> studentsToOmit)
|
||||
{
|
||||
var studentsToOmitList = studentsToOmit.ToList();
|
||||
var omittedStudents = Students.Where(studentsToOmitList.Contains).ToList();
|
||||
if (!omittedStudents.Any())
|
||||
return new Team(Name, Event, Students.ToList(), Captain);
|
||||
return new Team{Captain = Captain, Event = Event, Students = Students.ToList(), TeamId = Name};
|
||||
|
||||
var remainingStudents = Students.Where(s => !studentsToOmitList.Contains(s)).ToList();
|
||||
return new PartialTeam(Name, Event, remainingStudents, omittedStudents);
|
||||
return new PartialTeam { Name = Name, Event = Event, Students = remainingStudents, OmittedStudents = omittedStudents};
|
||||
}
|
||||
|
||||
public Team Clone() => CloneWithOmittedStudents(Array.Empty<Student>());
|
||||
public Team Clone() => CloneWithOmittedStudents([]);
|
||||
|
||||
public static int GetStudentTeamOverlapCount(IList<Team>[] timeSlots)
|
||||
{
|
||||
@@ -75,7 +69,7 @@ public class Team
|
||||
return GetStudentTeamOverlaps(timeSlot).Count();
|
||||
}
|
||||
|
||||
public static IEnumerable<Tuple<Student, IEnumerable<Team>>> GetStudentTeamOverlaps(IList<Team> timeSlot)
|
||||
public static IEnumerable<Tuple<Student, IEnumerable<Team>>> GetStudentTeamOverlaps(IList<Team> timeSlot)
|
||||
{
|
||||
return
|
||||
from s in timeSlot.SelectMany(ts => ts.Students).Distinct()
|
||||
@@ -92,7 +86,7 @@ public class Team
|
||||
|
||||
public string ToStringWithIndividualAndRegional()
|
||||
{
|
||||
var ind = Event.Format is EventFormat.Individual ? " (Ind.)" : string.Empty;
|
||||
var ind = Event.EventFormat is EventFormat.Individual ? " (Ind.)" : string.Empty;
|
||||
var regional= Event.RegionalEvent ? " (Reg.)" : string.Empty;
|
||||
//var regional= Event.RegionalEvent ? " (Reg.)" : string.Empty;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user