Add Blazor WebApp and rework data handling to utilize Entity Framework

This commit is contained in:
2025-09-11 11:49:48 -04:00
parent 5220e61c79
commit 3daa3b81b3
111 changed files with 6039 additions and 946 deletions
+21 -58
View File
@@ -1,6 +1,4 @@
using Core.Entities;
using FuzzySharp;
namespace Core.Parsers;
public class StudentParser : CsvParserBase
@@ -9,7 +7,11 @@ public class StudentParser : CsvParserBase
{
}
public Student[] Parse(ICollection<CompetitiveEvent> events)
public StudentParser(StreamReader reader, bool ignoreBlankLines = true) : base(reader, ignoreBlankLines)
{
}
public Student[] Parse()
{
var s = new List<Student>();
@@ -22,65 +24,26 @@ public class StudentParser : CsvParserBase
if (string.IsNullOrEmpty(name))
continue;
var stateID = CsvReader.GetField("State ID").Trim();
var regionalID = CsvReader.GetField("Regional ID").Trim();
var nationalID = CsvReader.GetField("National ID").Trim();
var gr = CsvReader.GetField("Grade");
var (firstName, lastName) = Student.ParseNameParts(name);
var stateId = CsvReader.GetField("State ID")?.Trim();
var regionalId = CsvReader.GetField("Regional ID")?.Trim();
var nationalId = CsvReader.GetField("National ID")?.Trim();
var grade = CsvReader.GetField("Grade");
var tsaYearsStr = CsvReader.GetField("TSA year");
var tsaYear = int.Parse(tsaYearsStr?[..1] ?? "1");
var officer = CsvReader.GetField("Officer");
var competitiveEvents = new List<CompetitiveEvent>(6);
for (var i = 1; i <= 6; i++)
var student = new Student
{
var eventName = CsvReader.GetField(i.ToString());
if (string.IsNullOrEmpty(eventName) || eventName == "") continue;
eventName = eventName.Trim();
if (eventName == "I&I")
eventName = "Inventions & Innovations";
if (eventName == "Med Tech")
eventName = "Medical Technology";
if (eventName.StartsWith("Challenging Tech"))
eventName = "Challenging Technology Issues";
var matches =
(from e in events
let rat = Fuzz.Ratio(e.Name, eventName)
where rat > 90
orderby rat descending
select e).ToList();
if (!matches.Any())
{
matches =
(from e in events
where e.Name.StartsWith(eventName)
select e).ToList();
}
var competitiveEvent = matches.FirstOrDefault();
if (competitiveEvent == null)
{
//todo: throw new ArgumentException($"Event named '{eventName}' not found");
continue;
}
competitiveEvents.Add(competitiveEvent);
}
if (!competitiveEvents.Any())
continue;
var student = new Student(
name.Trim(),
Convert.ToInt32(gr),
tsaYear,
officer?.Trim(),
competitiveEvents, stateID, regionalID, nationalID);
FirstName = firstName,
LastName = lastName,
Grade = Convert.ToInt32(grade),
TsaYear = tsaYear,
StateId = stateId,
RegionalId = regionalId,
NationalId = nationalId
};
s.Add(student);
}