From 8342e9cdd30a9136dec9dcffecb61d7926b0993d Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Tue, 24 Oct 2023 14:33:22 -0600 Subject: [PATCH] removed assignment id from edit and delete workflow --- .../Markdown/AssignmentMarkdownTests.cs | 11 ++++++ .../Markdown/QuizQuestionMarkdownTests.cs | 2 -- .../AssignmentForm/AssignmentForm.razor | 6 ++-- .../Configuration/AssignmentEditorContext.cs | 5 +-- Management/Models/Local/LocalAssignment.cs | 13 +++++++ Management/Services/FileStorageManager.cs | 35 ++++++++++++++----- 6 files changed, 55 insertions(+), 17 deletions(-) create mode 100644 Management.Test/Markdown/AssignmentMarkdownTests.cs diff --git a/Management.Test/Markdown/AssignmentMarkdownTests.cs b/Management.Test/Markdown/AssignmentMarkdownTests.cs new file mode 100644 index 0000000..ae9649a --- /dev/null +++ b/Management.Test/Markdown/AssignmentMarkdownTests.cs @@ -0,0 +1,11 @@ +public class AssignmentMarkdownTests +{ + [Test] + public void TestCanParseAssignmentSettings() + { + var assignmentMarkdown = @" + + + "; + } +} \ No newline at end of file diff --git a/Management.Test/Markdown/QuizQuestionMarkdownTests.cs b/Management.Test/Markdown/QuizQuestionMarkdownTests.cs index 59ac971..75cd1d5 100644 --- a/Management.Test/Markdown/QuizQuestionMarkdownTests.cs +++ b/Management.Test/Markdown/QuizQuestionMarkdownTests.cs @@ -19,7 +19,6 @@ public class QuizQuestionMarkdownTests { new LocalQuizQuestion() { - Id = "someid", Points = 2, Text = @"`some type` of question @@ -75,7 +74,6 @@ endline { new() { - Id = "somesdid", Text = "oneline question", Points = 1, QuestionType = QuestionType.MULTIPLE_ANSWERS, diff --git a/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor b/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor index 54f5c27..82ceed0 100644 --- a/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor +++ b/Management.Web/Shared/Components/AssignmentForm/AssignmentForm.razor @@ -61,16 +61,14 @@ .LocalCourse .Modules .First(m => - m.Assignments - .Select(a => a.Id) - .Contains(assignment.Id) + m.Assignments.Contains(assignment) ) ?? throw new Exception("handling assignment delete, could not find module"); var newModules = planner.LocalCourse.Modules.Select(m => m.Name == currentModule.Name ? m with { - Assignments = m.Assignments.Where(a => a.Id != assignment.Id).ToArray() + Assignments = m.Assignments.Where(a => a != assignment).ToArray() } : m ).ToArray(); diff --git a/Management/Features/Configuration/AssignmentEditorContext.cs b/Management/Features/Configuration/AssignmentEditorContext.cs index d37a59c..72644d2 100644 --- a/Management/Features/Configuration/AssignmentEditorContext.cs +++ b/Management/Features/Configuration/AssignmentEditorContext.cs @@ -26,9 +26,10 @@ public class AssignmentEditorContext { if (planner.LocalCourse != null) { + // run discovery on Assignment, it was the last stored version of the assignment var currentModule = planner.LocalCourse.Modules.First( - m => m.Assignments.Select(a => a.Id).Contains(newAssignment.Id) + m => m.Assignments.Contains(Assignment) ) ?? throw new Exception("could not find current module in assignment editor context"); var updatedModules = planner.LocalCourse.Modules @@ -38,7 +39,7 @@ public class AssignmentEditorContext ? currentModule with { Assignments = currentModule.Assignments - .Select(a => a.Id == newAssignment.Id ? newAssignment : a) + .Select(a => a == Assignment ? newAssignment : a) .ToArray() } : m diff --git a/Management/Models/Local/LocalAssignment.cs b/Management/Models/Local/LocalAssignment.cs index a03aa9c..2fcf367 100644 --- a/Management/Models/Local/LocalAssignment.cs +++ b/Management/Models/Local/LocalAssignment.cs @@ -105,4 +105,17 @@ public record LocalAssignment var yaml = serializer.Serialize(this); return yaml; } + + public string ToMarkdown() + { + var assignmentYaml = ToYaml(); + var assignmentMarkdown = + "```yaml" + Environment.NewLine + + assignmentYaml + + "```" + Environment.NewLine + + "" + Environment.NewLine + + Description; + + return assignmentMarkdown; + } } diff --git a/Management/Services/FileStorageManager.cs b/Management/Services/FileStorageManager.cs index 636622c..833dc74 100644 --- a/Management/Services/FileStorageManager.cs +++ b/Management/Services/FileStorageManager.cs @@ -96,7 +96,7 @@ public class FileStorageManager return true; }); - foreach(var file in filesToDelete) + foreach (var file in filesToDelete) { logger.Log($"removing old quiz, it has probably been renamed {file}"); File.Delete(file); @@ -104,7 +104,7 @@ public class FileStorageManager } - private static async Task saveAssignments(LocalCourse course, LocalModule module) + private async Task saveAssignments(LocalCourse course, LocalModule module) { var assignmentsDirectory = $"../storage/{course.Settings.Name}/{module.Name}/assignments"; if (!Directory.Exists(assignmentsDirectory)) @@ -112,17 +112,34 @@ public class FileStorageManager foreach (var assignment in module.Assignments) { - var assignmentYaml = assignment.ToYaml(); - var assignmentMarkdown = - "```yaml" + Environment.NewLine - + assignmentYaml - + "```" + Environment.NewLine - + "" + Environment.NewLine - + assignment.Description; + var assignmentMarkdown = assignment.ToMarkdown(); var filePath = assignmentsDirectory + "/" + assignment.Name + ".md"; await File.WriteAllTextAsync(filePath, assignmentMarkdown); } + removeOldAssignments(assignmentsDirectory, module); + } + private void removeOldAssignments(string path, LocalModule module) + { + var existingFiles = Directory.EnumerateFiles(path); + + var filesToDelete = existingFiles.Where((f) => + { + foreach (var assignment in module.Assignments) + { + var markdownPath = path + "/" + assignment.Name + ".md"; + if (f == markdownPath) + return false; + } + return true; + }); + + foreach (var file in filesToDelete) + { + logger.Log($"removing old assignment, it has probably been renamed {file}"); + File.Delete(file); + } + } public async Task> LoadSavedCourses()