removing dependency on canvas id in assignment

This commit is contained in:
2023-10-24 16:45:03 -06:00
parent b831d47d91
commit d53cb55c2f
4 changed files with 30 additions and 30 deletions

View File

@@ -1,5 +1,6 @@
@using Management.Web.Shared.Components @using Management.Web.Shared.Components
@using Management.Web.Shared.Components.AssignmentForm @using Management.Web.Shared.Components.AssignmentForm
@using CanvasModel.Assignments;
@inject DragContainer dragContainer @inject DragContainer dragContainer
@inject CoursePlanner planner @inject CoursePlanner planner
@@ -39,12 +40,14 @@
dragContainer.DropCallback = null; dragContainer.DropCallback = null;
} }
private bool isSyncedWithCanvas => private CanvasAssignment? assignmentInCanvas => planner
planner
.CanvasAssignments? .CanvasAssignments?
.FirstOrDefault( .FirstOrDefault(
a => a.Id == Assignment.CanvasId a => a.Name == Assignment.Name
) != null; );
private bool isSyncedWithCanvas =>
assignmentInCanvas != null;
private void OnClick() private void OnClick()
{ {
assignmentContext.Assignment = Assignment; assignmentContext.Assignment = Assignment;
@@ -76,7 +79,7 @@
&& planner.CanvasAssignments != null && planner.CanvasAssignments != null
&& planner.CanvasModules != null && planner.CanvasModules != null
&& Assignment.NeedsUpdates( && Assignment.NeedsUpdates(
planner.CanvasAssignments, assignmentInCanvas,
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups) Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.Settings.AssignmentGroups)
) )
) )

View File

@@ -92,7 +92,7 @@ public class AssignmentEditorContext
return; return;
} }
var createdAssignment = await planner.LocalCourse.SyncAssignmentToCanvas( var createdAssignmentCanvasId = await planner.LocalCourse.SyncAssignmentToCanvas(
canvasCourseId: (ulong)courseCanvasId, canvasCourseId: (ulong)courseCanvasId,
localAssignment: Assignment, localAssignment: Assignment,
canvasAssignments: planner.CanvasAssignments, canvasAssignments: planner.CanvasAssignments,
@@ -111,7 +111,7 @@ public class AssignmentEditorContext
(ulong)currentModule.CanvasId, (ulong)currentModule.CanvasId,
Assignment.Name, Assignment.Name,
"Assignment", "Assignment",
(ulong)createdAssignment.CanvasId createdAssignmentCanvasId
); );
await planner.LocalCourse.Modules.First().SortModuleItems( await planner.LocalCourse.Modules.First().SortModuleItems(

View File

@@ -12,7 +12,7 @@ public static partial class AssignmentSyncronizationExtensions
{ {
internal static async Task<LocalAssignment> SyncAssignmentToCanvas( internal static async Task<ulong> SyncAssignmentToCanvas(
this LocalCourse localCourse, this LocalCourse localCourse,
ulong canvasCourseId, ulong canvasCourseId,
LocalAssignment localAssignment, LocalAssignment localAssignment,
@@ -22,7 +22,7 @@ public static partial class AssignmentSyncronizationExtensions
{ {
// ignore past assignments // ignore past assignments
if(localAssignment.DueAt < DateTime.Now) if(localAssignment.DueAt < DateTime.Now)
return localAssignment; return (ulong)localAssignment.CanvasId;
var canvasAssignment = canvasAssignments.FirstOrDefault( var canvasAssignment = canvasAssignments.FirstOrDefault(
ca => ca.Id == localAssignment.CanvasId ca => ca.Id == localAssignment.CanvasId
@@ -36,7 +36,7 @@ public static partial class AssignmentSyncronizationExtensions
localCourse, localCourse,
canvasCourseId, canvasCourseId,
localAssignment, localAssignment,
canvasAssignments, canvasAssignment,
canvas, canvas,
localHtmlDescription, localHtmlDescription,
canvasAssignmentGroupId canvasAssignmentGroupId
@@ -44,18 +44,19 @@ public static partial class AssignmentSyncronizationExtensions
: await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription, canvasAssignmentGroupId); : await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription, canvasAssignmentGroupId);
} }
private static async Task<LocalAssignment> updateAssignmentIfNeeded( private static async Task<ulong> updateAssignmentIfNeeded(
LocalCourse localCourse, LocalCourse localCourse,
ulong canvasCourseId, ulong canvasCourseId,
LocalAssignment localAssignment, LocalAssignment localAssignment,
IEnumerable<CanvasAssignment> canvasAssignments, CanvasAssignment canvasAssignment,
CanvasService canvas, CanvasService canvas,
string localHtmlDescription, string localHtmlDescription,
ulong? canvasAssignmentGroupId ulong? canvasAssignmentGroupId
) )
{ {
var assignmentNeedsUpdates = localAssignment.NeedsUpdates( var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
canvasAssignments, canvasAssignment,
canvasAssignmentGroupId, canvasAssignmentGroupId,
quiet: false quiet: false
); );
@@ -68,17 +69,16 @@ public static partial class AssignmentSyncronizationExtensions
canvasAssignmentGroupId canvasAssignmentGroupId
); );
} }
return localAssignment; return canvasAssignment.Id;
} }
public static bool NeedsUpdates( public static bool NeedsUpdates(
this LocalAssignment localAssignment, this LocalAssignment localAssignment,
IEnumerable<CanvasAssignment> canvasAssignments, CanvasAssignment canvasAssignment,
ulong? canvasAssignmentGroupId, ulong? canvasAssignmentGroupId,
bool quiet = true bool quiet = true
) )
{ {
var canvasAssignment = canvasAssignments.First(ca => ca.Id == localAssignment.CanvasId);
var localHtmlDescription = localAssignment var localHtmlDescription = localAssignment
.GetDescriptionHtml() .GetDescriptionHtml()
@@ -252,8 +252,8 @@ public static partial class AssignmentSyncronizationExtensions
var assignmentTasks = m.Assignments.Select( var assignmentTasks = m.Assignments.Select(
async (a) => await localCourse.SyncAssignmentToCanvas(canvasCourseId, a, canvasAssignments, canvas) async (a) => await localCourse.SyncAssignmentToCanvas(canvasCourseId, a, canvasAssignments, canvas)
); );
var assignments = await Task.WhenAll(assignmentTasks); await Task.WhenAll(assignmentTasks);
return m with { Assignments = assignments }; return m;
}); });
var modules = await Task.WhenAll(moduleTasks); var modules = await Task.WhenAll(moduleTasks);

View File

@@ -35,7 +35,7 @@ public class CanvasAssignmentService
); );
} }
public async Task<LocalAssignment> Create( public async Task<ulong> Create(
ulong canvasCourseId, ulong canvasCourseId,
LocalAssignment localAssignment, LocalAssignment localAssignment,
string htmlDescription, string htmlDescription,
@@ -61,11 +61,10 @@ public class CanvasAssignmentService
if (canvasAssignment == null) if (canvasAssignment == null)
throw new Exception("created canvas assignment was null"); throw new Exception("created canvas assignment was null");
var updatedLocalAssignment = localAssignment with { CanvasId = canvasAssignment.Id };
await CreateRubric(canvasCourseId, updatedLocalAssignment); await CreateRubric(canvasCourseId, canvasAssignment.Id, localAssignment);
return updatedLocalAssignment; return canvasAssignment.Id;
} }
public async Task Update( public async Task Update(
@@ -93,7 +92,7 @@ public class CanvasAssignmentService
await webRequestor.PutAsync(request); await webRequestor.PutAsync(request);
await CreateRubric(courseId, localAssignment); await CreateRubric(courseId, (ulong)localAssignment.CanvasId, localAssignment);
} }
public async Task Delete(ulong courseId, ulong assignmentCanvasId, string assignmentName) public async Task Delete(ulong courseId, ulong assignmentCanvasId, string assignmentName)
@@ -109,10 +108,8 @@ public class CanvasAssignmentService
} }
} }
public async Task CreateRubric(ulong courseId, LocalAssignment localAssignment) public async Task CreateRubric(ulong courseId, ulong assignmentCanvasId, LocalAssignment localAssignment)
{ {
if (localAssignment.CanvasId == null)
throw new Exception("cannot create rubric if no canvas id in assignment");
var criterion = new Dictionary<int, object>(); var criterion = new Dictionary<int, object>();
@@ -136,18 +133,18 @@ public class CanvasAssignmentService
// https://canvas.instructure.com/doc/api/rubrics.html#method.rubrics.create // https://canvas.instructure.com/doc/api/rubrics.html#method.rubrics.create
var body = new var body = new
{ {
rubric_association_id = localAssignment.CanvasId, rubric_association_id = assignmentCanvasId,
rubric = new rubric = new
{ {
title = $"Rubric for Assignment: {localAssignment.Name}", title = $"Rubric for Assignment: {localAssignment.Name}",
association_id = localAssignment.CanvasId, association_id = assignmentCanvasId,
association_type = "Assignment", association_type = "Assignment",
use_for_grading = true, use_for_grading = true,
criteria = criterion, criteria = criterion,
}, },
rubric_association = new rubric_association = new
{ {
association_id = localAssignment.CanvasId, association_id = assignmentCanvasId,
association_type = "Assignment", association_type = "Assignment",
purpose = "grading", purpose = "grading",
use_for_grading = true, use_for_grading = true,
@@ -167,7 +164,7 @@ public class CanvasAssignmentService
{ {
assignment = new { points_possible = localAssignment.PointsPossible } assignment = new { points_possible = localAssignment.PointsPossible }
}; };
var adjustmentUrl = $"courses/{courseId}/assignments/{localAssignment.CanvasId}"; var adjustmentUrl = $"courses/{courseId}/assignments/{assignmentCanvasId}";
var pointAdjustmentRequest = new RestRequest(adjustmentUrl); var pointAdjustmentRequest = new RestRequest(adjustmentUrl);
pointAdjustmentRequest.AddBody(assignmentPointCorrectionBody); pointAdjustmentRequest.AddBody(assignmentPointCorrectionBody);
var (_, _) = await webRequestor.PutAsync<CanvasAssignment>(pointAdjustmentRequest); var (_, _) = await webRequestor.PutAsync<CanvasAssignment>(pointAdjustmentRequest);