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

View File

@@ -92,7 +92,7 @@ public class AssignmentEditorContext
return;
}
var createdAssignment = await planner.LocalCourse.SyncAssignmentToCanvas(
var createdAssignmentCanvasId = await planner.LocalCourse.SyncAssignmentToCanvas(
canvasCourseId: (ulong)courseCanvasId,
localAssignment: Assignment,
canvasAssignments: planner.CanvasAssignments,
@@ -111,7 +111,7 @@ public class AssignmentEditorContext
(ulong)currentModule.CanvasId,
Assignment.Name,
"Assignment",
(ulong)createdAssignment.CanvasId
createdAssignmentCanvasId
);
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,
ulong canvasCourseId,
LocalAssignment localAssignment,
@@ -22,7 +22,7 @@ public static partial class AssignmentSyncronizationExtensions
{
// ignore past assignments
if(localAssignment.DueAt < DateTime.Now)
return localAssignment;
return (ulong)localAssignment.CanvasId;
var canvasAssignment = canvasAssignments.FirstOrDefault(
ca => ca.Id == localAssignment.CanvasId
@@ -36,7 +36,7 @@ public static partial class AssignmentSyncronizationExtensions
localCourse,
canvasCourseId,
localAssignment,
canvasAssignments,
canvasAssignment,
canvas,
localHtmlDescription,
canvasAssignmentGroupId
@@ -44,18 +44,19 @@ public static partial class AssignmentSyncronizationExtensions
: await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription, canvasAssignmentGroupId);
}
private static async Task<LocalAssignment> updateAssignmentIfNeeded(
private static async Task<ulong> updateAssignmentIfNeeded(
LocalCourse localCourse,
ulong canvasCourseId,
LocalAssignment localAssignment,
IEnumerable<CanvasAssignment> canvasAssignments,
CanvasAssignment canvasAssignment,
CanvasService canvas,
string localHtmlDescription,
ulong? canvasAssignmentGroupId
)
{
var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
canvasAssignments,
canvasAssignment,
canvasAssignmentGroupId,
quiet: false
);
@@ -68,17 +69,16 @@ public static partial class AssignmentSyncronizationExtensions
canvasAssignmentGroupId
);
}
return localAssignment;
return canvasAssignment.Id;
}
public static bool NeedsUpdates(
this LocalAssignment localAssignment,
IEnumerable<CanvasAssignment> canvasAssignments,
CanvasAssignment canvasAssignment,
ulong? canvasAssignmentGroupId,
bool quiet = true
)
{
var canvasAssignment = canvasAssignments.First(ca => ca.Id == localAssignment.CanvasId);
var localHtmlDescription = localAssignment
.GetDescriptionHtml()
@@ -252,8 +252,8 @@ public static partial class AssignmentSyncronizationExtensions
var assignmentTasks = m.Assignments.Select(
async (a) => await localCourse.SyncAssignmentToCanvas(canvasCourseId, a, canvasAssignments, canvas)
);
var assignments = await Task.WhenAll(assignmentTasks);
return m with { Assignments = assignments };
await Task.WhenAll(assignmentTasks);
return m;
});
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,
LocalAssignment localAssignment,
string htmlDescription,
@@ -61,11 +61,10 @@ public class CanvasAssignmentService
if (canvasAssignment == 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(
@@ -93,7 +92,7 @@ public class CanvasAssignmentService
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)
@@ -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>();
@@ -136,18 +133,18 @@ public class CanvasAssignmentService
// https://canvas.instructure.com/doc/api/rubrics.html#method.rubrics.create
var body = new
{
rubric_association_id = localAssignment.CanvasId,
rubric_association_id = assignmentCanvasId,
rubric = new
{
title = $"Rubric for Assignment: {localAssignment.Name}",
association_id = localAssignment.CanvasId,
association_id = assignmentCanvasId,
association_type = "Assignment",
use_for_grading = true,
criteria = criterion,
},
rubric_association = new
{
association_id = localAssignment.CanvasId,
association_id = assignmentCanvasId,
association_type = "Assignment",
purpose = "grading",
use_for_grading = true,
@@ -167,7 +164,7 @@ public class CanvasAssignmentService
{
assignment = new { points_possible = localAssignment.PointsPossible }
};
var adjustmentUrl = $"courses/{courseId}/assignments/{localAssignment.CanvasId}";
var adjustmentUrl = $"courses/{courseId}/assignments/{assignmentCanvasId}";
var pointAdjustmentRequest = new RestRequest(adjustmentUrl);
pointAdjustmentRequest.AddBody(assignmentPointCorrectionBody);
var (_, _) = await webRequestor.PutAsync<CanvasAssignment>(pointAdjustmentRequest);