am syncing assignment groups

This commit is contained in:
2023-08-23 14:06:40 -06:00
parent 8c3ab09f38
commit bbae0c054d
18 changed files with 327 additions and 11 deletions

View File

@@ -0,0 +1,40 @@
using CanvasModel.Assignments;
using CanvasModel.Modules;
using LocalModels;
using Management.Services.Canvas;
namespace Management.Planner;
public static partial class AssignmentGroupSyncronizationExtensions
{
internal static async Task<IEnumerable<LocalAssignmentGroup>> EnsureAllAssignmentGroupsExistInCanvas(
this LocalCourse localCourse,
ulong courseCanvasId,
IEnumerable<CanvasAssignmentGroup> canvasAssignmentGroups,
CanvasService canvas
)
{
var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray();
var assignmentGroups = await Task.WhenAll((Task<LocalAssignmentGroup>[])localCourse.AssignmentGroups.Select(
async assignmentGroup =>
{
var canvasGroupWithSameName = canvasAssignmentGroups.FirstOrDefault(
cg => cg.Name.Equals(assignmentGroup.Name)
);
if (canvasGroupWithSameName == null)
return await canvas.AssignmentGroups.Create(courseCanvasId, assignmentGroup);
var correctGroup = assignmentGroup with { CanvasId = canvasGroupWithSameName.Id };
var needsUpdate = canvasGroupWithSameName.GroupWeight != correctGroup.Weight;
if (needsUpdate)
await canvas.AssignmentGroups.Update(courseCanvasId, assignmentGroup);
return correctGroup;
}
).ToArray());
return assignmentGroups;
}
}