mirror of
https://github.com/alexmickelson/canvasManagement.git
synced 2026-03-25 23:28:33 -06:00
103 lines
3.2 KiB
C#
103 lines
3.2 KiB
C#
using LocalModels;
|
|
|
|
public static class CourseDifferences
|
|
{
|
|
public static DeleteCourseChanges GetDeletedChanges(LocalCourse newCourse, LocalCourse oldCourse)
|
|
{
|
|
if (newCourse == oldCourse)
|
|
return new DeleteCourseChanges();
|
|
var moduleNamesNoLongerReferenced = oldCourse.Modules
|
|
.Where(oldModule =>
|
|
!newCourse.Modules.Any(newModule => newModule.Name == oldModule.Name)
|
|
)
|
|
.Select(oldModule => oldModule.Name)
|
|
.ToList();
|
|
|
|
var modulesWithDeletions = oldCourse.Modules
|
|
.Where(oldModule =>
|
|
!newCourse.Modules.Any(newModule => newModule.Equals(oldModule))
|
|
)
|
|
.Select(oldModule =>
|
|
{
|
|
var newModule = newCourse.Modules.FirstOrDefault(m => m.Name == oldModule.Name);
|
|
if (newModule == null)
|
|
return oldModule;
|
|
|
|
var unreferencedAssignments = oldModule.Assignments.Where(oldAssignment =>
|
|
!newModule.Assignments.Any(newAssignment => newAssignment.Name == oldAssignment.Name)
|
|
);
|
|
var unreferencedQuizzes = oldModule.Quizzes.Where(oldQuiz =>
|
|
!newModule.Quizzes.Any(newQuiz => newQuiz.Name == oldQuiz.Name)
|
|
);
|
|
var unreferencedPages = oldModule.Pages.Where(oldPage =>
|
|
!newModule.Pages.Any(newPage => newPage.Name == oldPage.Name)
|
|
);
|
|
|
|
return oldModule with
|
|
{
|
|
Assignments = unreferencedAssignments,
|
|
Quizzes = unreferencedQuizzes,
|
|
Pages = unreferencedPages,
|
|
};
|
|
})
|
|
.ToList();
|
|
|
|
return new DeleteCourseChanges
|
|
{
|
|
NamesOfModulesToDeleteCompletely = moduleNamesNoLongerReferenced,
|
|
DeleteContentsOfModule = modulesWithDeletions,
|
|
};
|
|
}
|
|
|
|
public static NewCourseChanges GetNewChanges(LocalCourse newCourse, LocalCourse oldCourse)
|
|
{
|
|
if (newCourse == oldCourse)
|
|
return new NewCourseChanges();
|
|
|
|
var differentModules = newCourse.Modules
|
|
.Where(newModule =>
|
|
!oldCourse.Modules.Any(oldModule => oldModule.Equals(newModule))
|
|
)
|
|
.Select(newModule =>
|
|
{
|
|
var oldModule = oldCourse.Modules.FirstOrDefault(m => m.Name == newModule.Name);
|
|
if (oldModule == null)
|
|
return newModule;
|
|
|
|
var newAssignments = newModule.Assignments.Where(
|
|
newAssignment => !oldModule.Assignments.Any(oldAssignment => newAssignment == oldAssignment)
|
|
);
|
|
var newQuizzes = newModule.Quizzes.Where(
|
|
newQuiz => !oldModule.Quizzes.Any(oldQuiz => newQuiz == oldQuiz)
|
|
);
|
|
var newPages = newModule.Pages.Where(
|
|
newPage => !oldModule.Pages.Any(oldPage => newPage == oldPage)
|
|
);
|
|
return newModule with
|
|
{
|
|
Assignments = newAssignments,
|
|
Quizzes = newQuizzes,
|
|
Pages = newPages,
|
|
};
|
|
})
|
|
.ToArray();
|
|
|
|
return new NewCourseChanges
|
|
{
|
|
Settings = newCourse.Settings,
|
|
Modules = differentModules,
|
|
};
|
|
}
|
|
|
|
}
|
|
|
|
public record NewCourseChanges
|
|
{
|
|
public IEnumerable<LocalModule> Modules { get; init; } = [];
|
|
public LocalCourseSettings? Settings { get; init; }
|
|
}
|
|
public record DeleteCourseChanges
|
|
{
|
|
public IEnumerable<string> NamesOfModulesToDeleteCompletely { get; init; } = [];
|
|
public IEnumerable<LocalModule> DeleteContentsOfModule { get; init; } = [];
|
|
} |