From 5280d495235acf61e7dff14ccd078a697a285a70 Mon Sep 17 00:00:00 2001 From: Alex Mickelson Date: Tue, 24 Oct 2023 14:05:53 -0600 Subject: [PATCH] have rename working for quizzes --- Management/Models/Local/LocalQuiz.cs | 2 -- Management/Services/FileStorageManager.cs | 36 +++++++++++++++++++++-- 2 files changed, 34 insertions(+), 4 deletions(-) diff --git a/Management/Models/Local/LocalQuiz.cs b/Management/Models/Local/LocalQuiz.cs index 9a9374c..7f58793 100644 --- a/Management/Models/Local/LocalQuiz.cs +++ b/Management/Models/Local/LocalQuiz.cs @@ -5,8 +5,6 @@ namespace LocalModels; public record LocalQuiz { - // public required string Id { get; init; } - // public ulong? CanvasId { get; init; } = null; public required string Name { get; init; } public required string Description { get; init; } public DateTime? LockAt { get; init; } diff --git a/Management/Services/FileStorageManager.cs b/Management/Services/FileStorageManager.cs index 4294480..636622c 100644 --- a/Management/Services/FileStorageManager.cs +++ b/Management/Services/FileStorageManager.cs @@ -1,9 +1,16 @@ using LocalModels; +using Management.Services; using YamlDotNet.Serialization; using YamlDotNet.Serialization.NamingConventions; public class FileStorageManager { + private readonly MyLogger logger; + + public FileStorageManager(MyLogger logger) + { + this.logger = logger; + } public string CourseToYaml(LocalCourse course) { var serializer = new SerializerBuilder().DisableAliases().Build(); @@ -34,7 +41,7 @@ public class FileStorageManager await File.WriteAllTextAsync($"../storage/{course.Settings.Name}.yml", courseString); } - private static async Task saveModules(LocalCourse course) + private async Task saveModules(LocalCourse course) { var courseDirectory = $"../storage/{course.Settings.Name}"; @@ -58,18 +65,43 @@ public class FileStorageManager await File.WriteAllTextAsync(settingsFilePath, settingsYaml); } - private static async Task saveQuizzes(LocalCourse course, LocalModule module) + private async Task saveQuizzes(LocalCourse course, LocalModule module) { var quizzesDirectory = $"../storage/{course.Settings.Name}/{module.Name}/quizzes"; if (!Directory.Exists(quizzesDirectory)) Directory.CreateDirectory(quizzesDirectory); + foreach (var quiz in module.Quizzes) { var markdownPath = quizzesDirectory + "/" + quiz.Name + ".md"; ; var quizMarkdown = quiz.ToMarkdown(); await File.WriteAllTextAsync(markdownPath, quizMarkdown); } + removeOldQuizzes(quizzesDirectory, module); + } + + private void removeOldQuizzes(string path, LocalModule module) + { + var existingFiles = Directory.EnumerateFiles(path); + + var filesToDelete = existingFiles.Where((f) => + { + foreach (var quiz in module.Quizzes) + { + var markdownPath = path + "/" + quiz.Name + ".md"; + if (f == markdownPath) + return false; + } + return true; + }); + + foreach(var file in filesToDelete) + { + logger.Log($"removing old quiz, it has probably been renamed {file}"); + File.Delete(file); + } + } private static async Task saveAssignments(LocalCourse course, LocalModule module)