added assignment group support

This commit is contained in:
2023-08-25 13:40:33 -06:00
parent 1ac6cfd57c
commit 762c91c17f
8 changed files with 56 additions and 14 deletions

View File

@@ -150,7 +150,8 @@
&& planner.CanvasModules != null
&& Assignment.NeedsUpdates(
planner.CanvasAssignments,
planner.LocalCourse.AssignmentTemplates
planner.LocalCourse.AssignmentTemplates,
Assignment.GetCanvasAssignmentGroupId(planner.LocalCourse.AssignmentGroups)
)
)
{

View File

@@ -24,6 +24,8 @@ public static partial class AssignmentSyncronizationExtensions
localCourse.AssignmentTemplates
);
var canvasAssignmentGroupId = localAssignment.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups);
return canvasAssignment != null
? await updateAssignmentIfNeeded(
localCourse,
@@ -31,9 +33,10 @@ public static partial class AssignmentSyncronizationExtensions
localAssignment,
canvasAssignments,
canvas,
localHtmlDescription
localHtmlDescription,
canvasAssignmentGroupId
)
: await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription);
: await canvas.Assignments.Create(canvasCourseId, localAssignment, localHtmlDescription, canvasAssignmentGroupId);
}
private static async Task<LocalAssignment> updateAssignmentIfNeeded(
@@ -42,12 +45,14 @@ public static partial class AssignmentSyncronizationExtensions
LocalAssignment localAssignment,
IEnumerable<CanvasAssignment> canvasAssignments,
CanvasService canvas,
string localHtmlDescription
string localHtmlDescription,
ulong? canvasAssignmentGroupId
)
{
var assignmentNeedsUpdates = localAssignment.NeedsUpdates(
canvasAssignments,
localCourse.AssignmentTemplates,
canvasAssignmentGroupId,
quiet: false
);
if (assignmentNeedsUpdates)
@@ -55,7 +60,8 @@ public static partial class AssignmentSyncronizationExtensions
await canvas.Assignments.Update(
courseId: canvasCourseId,
localAssignment,
localHtmlDescription
localHtmlDescription,
canvasAssignmentGroupId
);
}
return localAssignment;
@@ -65,6 +71,7 @@ public static partial class AssignmentSyncronizationExtensions
this LocalAssignment localAssignment,
IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<AssignmentTemplate> courseAssignmentTemplates,
ulong? canvasAssignmentGroupId,
bool quiet = true
)
{
@@ -154,6 +161,9 @@ public static partial class AssignmentSyncronizationExtensions
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
localAssignment.SubmissionTypes.Select(t => t.ToString())
);
var assignmentGroupSame =
canvasAssignmentGroupId != null
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
if (!quiet)
{
@@ -210,6 +220,10 @@ public static partial class AssignmentSyncronizationExtensions
Console.WriteLine(
$"Submission Types different for {localAssignment.Name}, local: {JsonSerializer.Serialize(localAssignment.SubmissionTypes.Select(t => t.ToString()))}, in canvas {JsonSerializer.Serialize(canvasAssignment.SubmissionTypes)}"
);
if(!assignmentGroupSame)
Console.WriteLine(
$"Canvas assignment group ids different for {localAssignment.Name}, local: {canvasAssignmentGroupId}, in canvas {canvasAssignment.AssignmentGroupId}"
);
}
return !nameSame
@@ -217,7 +231,8 @@ public static partial class AssignmentSyncronizationExtensions
|| !lockDatesSame
|| !descriptionSame
|| !pointsSame
|| !submissionTypesSame;
|| !submissionTypesSame
|| !assignmentGroupSame;
}
internal static async Task<LocalCourse> SyncAssignmentsWithCanvas(

View File

@@ -43,14 +43,14 @@ public static partial class QuizSyncronizationExtensions
)
{
var isCreated = localQuiz.QuizIsCreated(canvasQuizzes);
var canvasAssignmentGroupId = localQuiz.GetCanvasAssignmentGroupId(localCourse.AssignmentGroups);
if (isCreated)
{
// TODO write update
}
else
{
return await canvas.Quizzes.Create(canvasCourseId, localQuiz);
return await canvas.Quizzes.Create(canvasCourseId, localQuiz, canvasAssignmentGroupId);
}
return localQuiz;

View File

@@ -89,4 +89,9 @@ public record LocalAssignment
return Markdig.Markdown.ToHtml(Description) + "<hr>" + rubricHtml;
}
public ulong? GetCanvasAssignmentGroupId(IEnumerable<LocalAssignmentGroup> assignmentGroups) =>
assignmentGroups
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
.CanvasId;
}

View File

@@ -21,4 +21,8 @@ public record LocalQuiz
// If “until_after_last_attempt”, students can only see results after their last attempt. (Only valid if allowed_attempts > 1). Defaults to null.
public IEnumerable<LocalQuizQuestion> Questions { get; init; } =
Enumerable.Empty<LocalQuizQuestion>();
public ulong? GetCanvasAssignmentGroupId(IEnumerable<LocalAssignmentGroup> assignmentGroups) =>
assignmentGroups
.FirstOrDefault(g => g.Id == LocalAssignmentGroupId)?
.CanvasId;
}

View File

@@ -32,7 +32,8 @@ public class CanvasAssignmentService
public async Task<LocalAssignment> Create(
ulong canvasCourseId,
LocalAssignment localAssignment,
string htmlDescription
string htmlDescription,
ulong? canvasAssignmentGroupId
)
{
Console.WriteLine($"creating assignment: {localAssignment.Name}");
@@ -45,7 +46,8 @@ public class CanvasAssignmentService
description = htmlDescription,
due_at = localAssignment.DueAt,
lock_at = localAssignment.LockAtDueDate ? localAssignment.DueAt : localAssignment.LockAt,
points_possible = localAssignment.PointsPossible
points_possible = localAssignment.PointsPossible,
assignment_group_id = canvasAssignmentGroupId,
};
var bodyObj = new { assignment = body };
request.AddBody(bodyObj);
@@ -60,7 +62,12 @@ public class CanvasAssignmentService
return updatedLocalAssignment;
}
public async Task Update(ulong courseId, LocalAssignment localAssignment, string htmlDescription)
public async Task Update(
ulong courseId,
LocalAssignment localAssignment,
string htmlDescription,
ulong? canvasAssignmentGroupId
)
{
Console.WriteLine($"updating assignment: {localAssignment.Name}");
var url = $"courses/{courseId}/assignments/{localAssignment.CanvasId}";
@@ -72,7 +79,8 @@ public class CanvasAssignmentService
description = htmlDescription,
due_at = localAssignment.DueAt,
lock_at = localAssignment.LockAtDueDate ? localAssignment.DueAt : localAssignment.LockAt,
points_possible = localAssignment.PointsPossible
points_possible = localAssignment.PointsPossible,
assignment_group_id = canvasAssignmentGroupId,
};
var bodyObj = new { assignment = body };
request.AddBody(bodyObj);

View File

@@ -36,7 +36,11 @@ public class CanvasQuizService
);
}
public async Task<LocalQuiz> Create(ulong canvasCourseId, LocalQuiz localQuiz)
public async Task<LocalQuiz> Create(
ulong canvasCourseId,
LocalQuiz localQuiz,
ulong? canvasAssignmentGroupId
)
{
Console.WriteLine($"Creating Quiz {localQuiz.Name}");
@@ -56,6 +60,7 @@ public class CanvasQuizService
cant_go_back = false,
due_at = localQuiz.DueAt,
lock_at = localQuiz.LockAtDueDate ? localQuiz.DueAt : localQuiz.LockAt,
assignment_group_id = canvasAssignmentGroupId,
}
};
var request = new RestRequest(url);

View File

@@ -131,7 +131,11 @@ GET https://snow.instructure.com/api/v1/courses/872095/assignments/12676639?incl
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
###
GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups
GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups/
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
###
GET https://snow.instructure.com/api/v1/courses/871954/assignment_groups/1943132
Authorization: Bearer {{$dotenv CANVAS_TOKEN}}
###
GET https://snow.instructure.com/api/v1/courses/871954