fixed assignment rendering bug, removed canvas id from assignment

This commit is contained in:
2023-11-15 11:38:33 -07:00
parent 8d83e0ecd4
commit 2ac0449935
7 changed files with 34 additions and 111 deletions

View File

@@ -1,11 +1,13 @@
using LocalModels;
public class AssignmentMarkdownTests
{
[Test]
public void TestCanParseAssignmentSettings()
{
var assignmentMarkdown = @"
var assignment = new LocalAssignment()
{
";
};
}
}

View File

@@ -44,6 +44,7 @@
private void handleNewDescription(string newDescription)
{
description = newDescription;
if (newDescription != string.Empty)
{
descriptionForPreview = newDescription;
@@ -56,6 +57,7 @@
assignmentContext.SaveAssignment(newAssignment);
}
}
StateHasChanged();
}
private MarkupString preview { get => (MarkupString)Markdown.ToHtml(descriptionForPreview); }
@@ -76,8 +78,8 @@
<MonacoTextArea Value="@description" OnChange="@handleNewDescription" />
</div>
<div class="col-6" @key="descriptionForPreview">
@(preview)
<div class="col-6" @key="descriptionForPreview" >
@((MarkupString)Markdown.ToHtml(descriptionForPreview))
</div>
</div>
}

View File

@@ -134,12 +134,6 @@ public class CoursePlanner
LoadingCanvasData = true;
StateHasChanged?.Invoke();
LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(
canvasModules,
canvasAssignments,
canvasAssignmentGroups,
canvasQuizzes
);
var canvasId =
LocalCourse.Settings.CanvasId ?? throw new Exception("no course canvas id to sync with canvas");
@@ -170,7 +164,7 @@ public class CoursePlanner
CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
await LocalCourse.SyncModuleItemsWithCanvas(canvasId, CanvasModulesItems, canvas);
await LocalCourse.SyncModuleItemsWithCanvas(canvasId, CanvasModulesItems, canvas, CanvasAssignments);
CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
LoadingCanvasData = false;

View File

@@ -45,83 +45,6 @@ public static class CoursePlannerExtensions
};
}
public static LocalCourse deleteCanvasIdsThatNoLongerExist(
this LocalCourse localCourse,
IEnumerable<CanvasModule> canvasModules,
IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<CanvasAssignmentGroup> canvasAssignmentGroups,
IEnumerable<CanvasQuiz> canvasQuizzes
)
{
Console.WriteLine("checking canvas ids still exist");
var correctedModules = localCourse.Modules
.Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments, canvasQuizzes))
.ToArray();
var canvasAssignmentGroupIds = canvasAssignmentGroups.Select(g => g.Id).ToArray();
var correctAssignmentGroups = localCourse.Settings.AssignmentGroups.Select(
g =>
{
var groupCanvasId = g.CanvasId ?? 0;
return canvasAssignmentGroupIds.Contains(groupCanvasId)
? g
: g with { CanvasId = null };
}
).ToArray();
return localCourse with
{
Modules = correctedModules,
Settings = localCourse.Settings with
{
AssignmentGroups = correctAssignmentGroups,
}
};
}
private static LocalModule validateCanvasIds(
this LocalModule module,
IEnumerable<CanvasModule> canvasModules,
IEnumerable<CanvasAssignment> canvasAssignments,
IEnumerable<CanvasQuiz> canvasQuizzes
)
{
var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Name == module.Name) != null;
var moduleWithAssignments = module with
{
Assignments = module.Assignments
.Select((a) => a.validateAssignmentForCanvasId(canvasAssignments))
.ToArray(),
};
if (!moduleIdInCanvas)
{
Console.WriteLine(
$"no id in canvas for module, removing old canvas id: {moduleWithAssignments.Name}"
);
return moduleWithAssignments;
}
return moduleWithAssignments;
}
private static LocalAssignment validateAssignmentForCanvasId(
this LocalAssignment assignment,
IEnumerable<CanvasAssignment> canvasAssignments
)
{
var assignmentIdInCanvas =
canvasAssignments.FirstOrDefault(ca => ca.Id == assignment.CanvasId) != null;
if (!assignmentIdInCanvas)
{
Console.WriteLine(
$"no id in canvas for assignment, removing old canvas id: {assignment.Name}"
);
return assignment with { CanvasId = null };
}
return assignment;
}
public static LocalAssignment validateSubmissionTypes(this LocalAssignment assignment)
{
var containsDiscussion =

View File

@@ -22,7 +22,7 @@ public static partial class AssignmentSyncronizationExtensions
{
var canvasAssignment = canvasAssignments.FirstOrDefault(
ca => ca.Id == localAssignment.CanvasId
ca => ca.Name == localAssignment.Name
);
string localHtmlDescription = localAssignment.GetDescriptionHtml();
@@ -61,7 +61,7 @@ public static partial class AssignmentSyncronizationExtensions
{
await canvas.Assignments.Update(
courseId: canvasCourseId,
canvasAssignmentId: (ulong) localAssignment.CanvasId,
canvasAssignmentId: canvasAssignment.Id,
localAssignment,
localHtmlDescription,
(ulong)canvasAssignmentGroupId
@@ -164,8 +164,8 @@ public static partial class AssignmentSyncronizationExtensions
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
localAssignment.SubmissionTypes.Select(t => t.ToString())
);
var assignmentGroupSame =
canvasAssignmentGroupId != null
var assignmentGroupSame =
canvasAssignmentGroupId != null
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
if (!quiet)
@@ -223,7 +223,7 @@ 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)
if (!assignmentGroupSame)
Console.WriteLine(
$"Canvas assignment group ids different for {localAssignment.Name}, local: {canvasAssignmentGroupId}, in canvas {canvasAssignment.AssignmentGroupId}"
);

View File

@@ -1,3 +1,4 @@
using CanvasModel.Assignments;
using CanvasModel.Modules;
using LocalModels;
using Management.Services.Canvas;
@@ -95,24 +96,25 @@ public static partial class ModuleSyncronizationExtensions
ulong canvasId,
CanvasModule canvasModule,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas
CanvasService canvas,
IEnumerable<CanvasAssignment> canvasAssignments
)
{
var anyUpdated = false;
foreach (var localAssignment in localModule.Assignments.Where(a => a.DueAt > DateTime.Now))
{
var canvasModuleItemContentIds = canvasModulesItems[canvasModule].Select(i => i.ContentId);
if (!canvasModuleItemContentIds.Contains(localAssignment.CanvasId))
var canvasModuleItemContentNames = canvasModulesItems[canvasModule].Select(i => i.Title);
if (!canvasModuleItemContentNames.Contains(localAssignment.Name))
{
var canvasAssignmentId =
localAssignment.CanvasId
?? throw new Exception("cannot create module item if assignment does not have canvas id");
var canvasAssignment = canvasAssignments.FirstOrDefault(a => a.Name == localAssignment.Name)
?? throw new Exception($"cannot create module item if cannot find canvas assignment with name {localAssignment.Name}");
await canvas.CreateModuleItem(
canvasId,
canvasModule.Id,
localAssignment.Name,
"Assignment",
canvasAssignmentId
canvasAssignment.Id
);
anyUpdated = true;
}
@@ -125,23 +127,22 @@ public static partial class ModuleSyncronizationExtensions
this LocalCourse localCourse,
ulong courseCanvasId,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas
CanvasService canvas,
IEnumerable<CanvasAssignment> canvasAssignments
)
{
foreach (var localModule in localCourse.Modules)
{
// var moduleCanvasId =
// localModule.CanvasId
// ?? throw new Exception("cannot sync canvas modules items if module not synced with canvas");
await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas);
await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas, canvasAssignments);
}
}
public static async Task SyncAndSortCanvasModule(
this LocalModule localModule,
ulong courseCanvasId,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas
ulong courseCanvasId,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas,
IEnumerable<CanvasAssignment> canvasAssignments
)
{
var canvasModule = canvasModulesItems.Keys.FirstOrDefault(k => k.Name == localModule.Name);
@@ -154,7 +155,8 @@ public static partial class ModuleSyncronizationExtensions
courseCanvasId,
canvasModule,
canvasModulesItems,
canvas
canvas,
canvasAssignments
);
var canvasModuleItems = anyUpdated

View File

@@ -42,7 +42,7 @@ public static class SubmissionType
public record LocalAssignment
{
public ulong? CanvasId { get; init; } = null;
// public ulong? CanvasId { get; init; } = null;
public string Name { get; init; } = "";
public string Description { get; init; } = "";
public bool LockAtDueDate { get; init; }