using CanvasModel.Assignments; using CanvasModel.Modules; using LocalModels; namespace Management.Planner; public static class CoursePlannerExtensions { public static LocalCourse GeneralCourseCleanup(this LocalCourse incomingCourse) { var cleanModules = incomingCourse.Modules.Select( module => module with { Assignments = module.Assignments .OrderBy(a => a.DueAt) .DistinctBy(a => a.Id) .Select(a => a.validateSubmissionTypes()) } ); var cleanStartDay = new DateTime( incomingCourse.StartDate.Year, incomingCourse.StartDate.Month, incomingCourse.StartDate.Day ); var cleanEndDay = new DateTime( incomingCourse.EndDate.Year, incomingCourse.EndDate.Month, incomingCourse.EndDate.Day ); return incomingCourse with { Modules = cleanModules, StartDate = cleanStartDay, EndDate = cleanEndDay, }; } public static LocalCourse deleteCanvasIdsThatNoLongerExist( this LocalCourse localCourse, IEnumerable canvasModules, IEnumerable canvasAssignments ) { Console.WriteLine("checking canvas ids still exist"); var correctedModules = localCourse.Modules .Select((m) => m.validateCanvasIds(canvasModules, canvasAssignments)) .ToArray(); return localCourse with { Modules = correctedModules }; } private static LocalModule validateCanvasIds( this LocalModule module, IEnumerable canvasModules, IEnumerable canvasAssignments ) { var moduleIdInCanvas = canvasModules.FirstOrDefault(m => m.Id == module.CanvasId) != 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 with { CanvasId = null }; } return moduleWithAssignments; } private static LocalAssignment validateAssignmentForCanvasId( this LocalAssignment assignment, IEnumerable 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 = assignment.SubmissionTypes.FirstOrDefault(t => t == SubmissionType.DISCUSSION_TOPIC) != null; if (containsDiscussion) return assignment with { SubmissionTypes = new string[] { SubmissionType.DISCUSSION_TOPIC } }; return assignment; } }