Files
chapter-organizer/Core/Parsers/AssignmentRequirementParser.cs
poprhythm 45edcf5e5f Refactor event assignment structure and introduce new models for assignment parameters and requirements
This commit removes the obsolete EventAssignment class from Core.Entities and introduces new models in Core.Models, including AssignmentParameters, AssignmentRequirement, PartialTeam, and StudentEventStatistics. The changes enhance the organization of assignment-related data and improve the overall structure of the codebase. Additionally, several files have been updated to include references to the new Core.Models namespace, ensuring consistency across the application.
2026-01-10 18:36:52 -05:00

59 lines
1.5 KiB
C#

using Core.Entities;
using Core.Models;
namespace Core.Parsers;
public class AssignmentRequirementParser : CsvParserBase
{
public AssignmentRequirementParser(FileSystemInfo csvFile, bool ignoreBlankLines = true) : base(csvFile, ignoreBlankLines)
{
}
public AssignmentRequirement[] Parse(ICollection<EventDefinition> events, ICollection<Student> students)
{
var assumptions = new List<AssignmentRequirement>();
CsvReader.Read();
CsvReader.ReadHeader();
var studentColumns =
CsvReader.HeaderRecord!.Select(h => h.Trim()).Where(h => !string.IsNullOrEmpty(h)).ToArray();
var studentArray =
studentColumns
.Select(c => students.FirstOrDefault(s => s.FirstName == c)).ToArray();
while (CsvReader.Read())
{
var eventShortName= CsvReader.GetField(0);
var evt = events.FirstOrDefault(e => e.ShortName == eventShortName);
if (evt == null)
throw new Exception($"Could not find eventDefinition named {eventShortName}");
for (int i = 0; i < studentArray.Length; i++)
{
var student = studentArray[i];
if (student == null)
continue;
var field = CsvReader.GetField(i + 1);
switch (field)
{
case "x":
case "X":
assumptions.Add(new AssignmentRequirement(evt, student, Requirement.Exclude));
break;
case "i":
case "I":
assumptions.Add(new AssignmentRequirement(evt, student, Requirement.Include));
break;
default:
break;
}
}
}
return assumptions.ToArray();
}
}