Add Blazor WebApp and rework data handling to utilize Entity Framework
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user