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 public class AssignmentMarkdownTests
{ {
[Test] [Test]
public void TestCanParseAssignmentSettings() public void TestCanParseAssignmentSettings()
{ {
var assignmentMarkdown = @" var assignment = new LocalAssignment()
{
};
";
} }
} }

View File

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

View File

@@ -134,12 +134,6 @@ public class CoursePlanner
LoadingCanvasData = true; LoadingCanvasData = true;
StateHasChanged?.Invoke(); StateHasChanged?.Invoke();
LocalCourse = LocalCourse.deleteCanvasIdsThatNoLongerExist(
canvasModules,
canvasAssignments,
canvasAssignmentGroups,
canvasQuizzes
);
var canvasId = var canvasId =
LocalCourse.Settings.CanvasId ?? throw new Exception("no course canvas id to sync with canvas"); 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); 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); CanvasModulesItems = await canvas.Modules.GetAllModulesItems(canvasId, CanvasModules);
LoadingCanvasData = false; 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) public static LocalAssignment validateSubmissionTypes(this LocalAssignment assignment)
{ {
var containsDiscussion = var containsDiscussion =

View File

@@ -22,7 +22,7 @@ public static partial class AssignmentSyncronizationExtensions
{ {
var canvasAssignment = canvasAssignments.FirstOrDefault( var canvasAssignment = canvasAssignments.FirstOrDefault(
ca => ca.Id == localAssignment.CanvasId ca => ca.Name == localAssignment.Name
); );
string localHtmlDescription = localAssignment.GetDescriptionHtml(); string localHtmlDescription = localAssignment.GetDescriptionHtml();
@@ -61,7 +61,7 @@ public static partial class AssignmentSyncronizationExtensions
{ {
await canvas.Assignments.Update( await canvas.Assignments.Update(
courseId: canvasCourseId, courseId: canvasCourseId,
canvasAssignmentId: (ulong) localAssignment.CanvasId, canvasAssignmentId: canvasAssignment.Id,
localAssignment, localAssignment,
localHtmlDescription, localHtmlDescription,
(ulong)canvasAssignmentGroupId (ulong)canvasAssignmentGroupId
@@ -164,8 +164,8 @@ public static partial class AssignmentSyncronizationExtensions
var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual( var submissionTypesSame = canvasAssignment.SubmissionTypes.SequenceEqual(
localAssignment.SubmissionTypes.Select(t => t.ToString()) localAssignment.SubmissionTypes.Select(t => t.ToString())
); );
var assignmentGroupSame = var assignmentGroupSame =
canvasAssignmentGroupId != null canvasAssignmentGroupId != null
&& canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId; && canvasAssignmentGroupId == canvasAssignment.AssignmentGroupId;
if (!quiet) if (!quiet)
@@ -223,7 +223,7 @@ public static partial class AssignmentSyncronizationExtensions
Console.WriteLine( Console.WriteLine(
$"Submission Types different for {localAssignment.Name}, local: {JsonSerializer.Serialize(localAssignment.SubmissionTypes.Select(t => t.ToString()))}, in canvas {JsonSerializer.Serialize(canvasAssignment.SubmissionTypes)}" $"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( Console.WriteLine(
$"Canvas assignment group ids different for {localAssignment.Name}, local: {canvasAssignmentGroupId}, in canvas {canvasAssignment.AssignmentGroupId}" $"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 CanvasModel.Modules;
using LocalModels; using LocalModels;
using Management.Services.Canvas; using Management.Services.Canvas;
@@ -95,24 +96,25 @@ public static partial class ModuleSyncronizationExtensions
ulong canvasId, ulong canvasId,
CanvasModule canvasModule, CanvasModule canvasModule,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems, Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas CanvasService canvas,
IEnumerable<CanvasAssignment> canvasAssignments
) )
{ {
var anyUpdated = false; var anyUpdated = false;
foreach (var localAssignment in localModule.Assignments.Where(a => a.DueAt > DateTime.Now)) foreach (var localAssignment in localModule.Assignments.Where(a => a.DueAt > DateTime.Now))
{ {
var canvasModuleItemContentIds = canvasModulesItems[canvasModule].Select(i => i.ContentId); var canvasModuleItemContentNames = canvasModulesItems[canvasModule].Select(i => i.Title);
if (!canvasModuleItemContentIds.Contains(localAssignment.CanvasId)) if (!canvasModuleItemContentNames.Contains(localAssignment.Name))
{ {
var canvasAssignmentId = var canvasAssignment = canvasAssignments.FirstOrDefault(a => a.Name == localAssignment.Name)
localAssignment.CanvasId ?? throw new Exception($"cannot create module item if cannot find canvas assignment with name {localAssignment.Name}");
?? throw new Exception("cannot create module item if assignment does not have canvas id");
await canvas.CreateModuleItem( await canvas.CreateModuleItem(
canvasId, canvasId,
canvasModule.Id, canvasModule.Id,
localAssignment.Name, localAssignment.Name,
"Assignment", "Assignment",
canvasAssignmentId canvasAssignment.Id
); );
anyUpdated = true; anyUpdated = true;
} }
@@ -125,23 +127,22 @@ public static partial class ModuleSyncronizationExtensions
this LocalCourse localCourse, this LocalCourse localCourse,
ulong courseCanvasId, ulong courseCanvasId,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems, Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas CanvasService canvas,
IEnumerable<CanvasAssignment> canvasAssignments
) )
{ {
foreach (var localModule in localCourse.Modules) foreach (var localModule in localCourse.Modules)
{ {
// var moduleCanvasId = await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas, canvasAssignments);
// localModule.CanvasId
// ?? throw new Exception("cannot sync canvas modules items if module not synced with canvas");
await localModule.SyncAndSortCanvasModule(courseCanvasId, canvasModulesItems, canvas);
} }
} }
public static async Task SyncAndSortCanvasModule( public static async Task SyncAndSortCanvasModule(
this LocalModule localModule, this LocalModule localModule,
ulong courseCanvasId, ulong courseCanvasId,
Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems, Dictionary<CanvasModule, IEnumerable<CanvasModuleItem>> canvasModulesItems,
CanvasService canvas CanvasService canvas,
IEnumerable<CanvasAssignment> canvasAssignments
) )
{ {
var canvasModule = canvasModulesItems.Keys.FirstOrDefault(k => k.Name == localModule.Name); var canvasModule = canvasModulesItems.Keys.FirstOrDefault(k => k.Name == localModule.Name);
@@ -154,7 +155,8 @@ public static partial class ModuleSyncronizationExtensions
courseCanvasId, courseCanvasId,
canvasModule, canvasModule,
canvasModulesItems, canvasModulesItems,
canvas canvas,
canvasAssignments
); );
var canvasModuleItems = anyUpdated var canvasModuleItems = anyUpdated

View File

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