diff --git a/Management/Features/Configuration/CoursePlanner.cs b/Management/Features/Configuration/CoursePlanner.cs index a81d8ff..be57cc0 100644 --- a/Management/Features/Configuration/CoursePlanner.cs +++ b/Management/Features/Configuration/CoursePlanner.cs @@ -121,7 +121,12 @@ public class CoursePlanner var canvasId = LocalCourse.CanvasId ?? throw new Exception("no course canvas id to sync with canvas"); - await LocalCourse.EnsureAllModulesExistInCanvas(canvasId, CanvasModules, canvas); + var newModules = await LocalCourse.EnsureAllModulesExistInCanvas( + canvasId, + CanvasModules, + canvas + ); + LocalCourse = LocalCourse with { Modules = newModules }; CanvasModules = await canvas.GetModules(canvasId); await LocalCourse.SortCanvasModules(canvasId, CanvasModules, canvas); diff --git a/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs b/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs index 05b2601..c796b64 100644 --- a/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs +++ b/Management/Features/Configuration/CoursePlannerSyncronizationExtensions.cs @@ -8,21 +8,26 @@ namespace Management.Planner; public static partial class CoursePlannerSyncronizationExtensions { - internal static async Task EnsureAllModulesExistInCanvas( + internal static async Task> EnsureAllModulesExistInCanvas( this LocalCourse localCourse, ulong canvasId, IEnumerable canvasModules, CanvasService canvas ) { - foreach (var module in localCourse.Modules) + var moduleTasks = localCourse.Modules.Select(async module => { var canvasModule = canvasModules.FirstOrDefault(cm => cm.Id == module.CanvasId); if (canvasModule == null) { - await canvas.CreateModule(canvasId, module.Name); + var newModule = await canvas.CreateModule(canvasId, module.Name); + return module with { CanvasId = newModule.Id }; } - } + else + return module; + }); + var newModules = await Task.WhenAll(moduleTasks); + return newModules ?? throw new Exception("Error ensuring all modules exist in canvas"); } internal static async Task SortCanvasModules( @@ -107,7 +112,8 @@ public static partial class CoursePlannerSyncronizationExtensions { var canvasAssignment = canvasAssignments.First(ca => ca.Id == localAssignment.CanvasId); - var localHtmlDescription = localAssignment.GetDescriptionHtml(courseAssignmentTemplates) + var localHtmlDescription = localAssignment + .GetDescriptionHtml(courseAssignmentTemplates) .Replace(">", "") .Replace("<", "") .Replace(">", "") diff --git a/Management/Services/Canvas/CanvasService.cs b/Management/Services/Canvas/CanvasService.cs index 1453e0c..517385f 100644 --- a/Management/Services/Canvas/CanvasService.cs +++ b/Management/Services/Canvas/CanvasService.cs @@ -66,14 +66,15 @@ public class CanvasService return modules.SelectMany(c => c).ToArray(); } - public async Task CreateModule(ulong courseId, string name) + public async Task CreateModule(ulong courseId, string name) { Console.WriteLine($"Creating Module: {name}"); var url = $"courses/{courseId}/modules"; var request = new RestRequest(url); request.AddParameter("module[name]", name); - await webRequestor.PostAsync(request); + var (newModule, _) = await webRequestor.PostAsync(request); + return newModule ?? throw new Exception($"failed to create new canvas module {name}"); } public async Task UpdateModule(ulong courseId, ulong moduleId, string name, int position)