using System.Collections; using System.Reflection.Metadata.Ecma335; using System.Text; using System.Text.RegularExpressions; using YamlDotNet.Serialization; namespace LocalModels; public record LocalAssignment: IModuleItem { private string _name = ""; public string Name { get => _name; init { if (value.Contains(':')) throw new AssignmentMarkdownParseException("Name cannot contain a ':' character, it breaks windows filesystems " + value); _name = value; } } public string Description { get; init; } = ""; public DateTime? LockAt { get; init; } public DateTime DueAt { get; init; } public string? LocalAssignmentGroupName { get; init; } public IEnumerable SubmissionTypes { get; init; } = Array.Empty(); public IEnumerable Rubric { get; init; } = Array.Empty(); public int PointsPossible => Rubric.Sum(r => r.IsExtraCredit ? 0 : r.Points); public string GetDescriptionHtml() { return Markdig.Markdown.ToHtml(Description); } public ulong? GetCanvasAssignmentGroupId(IEnumerable assignmentGroups) => assignmentGroups .FirstOrDefault(g => g.Name == LocalAssignmentGroupName)? .CanvasId; public string ToMarkdown() => this.AssignmentToMarkdown(); public string RubricToMarkdown() => this.AssignmentRubricToMarkdown(); public static LocalAssignment ParseMarkdown(string input) => LocalAssignmentMarkdownParser.ParseMarkdown(input); public static IEnumerable ParseRubricMarkdown(string rawMarkdown) => LocalAssignmentMarkdownParser.ParseRubricMarkdown(rawMarkdown); }