From f1d5910f8bb4e3baa8d7c36c80bd399dc2d6406e Mon Sep 17 00:00:00 2001 From: Andrea Brighi Date: Mon, 10 Jul 2023 00:50:09 +0200 Subject: [PATCH] chore(school): remove duplication in AlterationPolicy --- .../schooldomain/policy/AlterationPolicy.kt | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/schoolDomain/src/main/kotlin/com/intelligentbackpack/schooldomain/policy/AlterationPolicy.kt b/schoolDomain/src/main/kotlin/com/intelligentbackpack/schooldomain/policy/AlterationPolicy.kt index 5f1de57a..1ae43583 100644 --- a/schoolDomain/src/main/kotlin/com/intelligentbackpack/schooldomain/policy/AlterationPolicy.kt +++ b/schoolDomain/src/main/kotlin/com/intelligentbackpack/schooldomain/policy/AlterationPolicy.kt @@ -29,6 +29,13 @@ object AlterationPolicy { return (initialDate..finalDate).contains(date) } + private fun isNewLessonOverlapping(newLesson: CalendarEvent, lesson: CalendarEvent) = + when (newLesson) { + is WeekLesson -> isNewLessonOverlapping(newLesson, lesson) + is DateLesson -> isNewLessonOverlapping(newLesson, lesson) + else -> false + } + private fun isNewLessonOverlapping(newLesson: WeekLesson, lesson: CalendarEvent) = when (lesson) { is WeekLesson -> lesson.day == newLesson.day && isOverlappingDate(newLesson, lesson) @@ -90,8 +97,8 @@ object AlterationPolicy { ): Boolean { val allLesson = ( lessons + - newEvents.mapNotNull { it.event as Lesson? } + - rescheduleEvents.mapNotNull { it.event as Lesson? } + newEvents.map { it.event } + + rescheduleEvents.map { it.event } ).filter { lesson -> cancelEvents.none { it.event == lesson && @@ -105,29 +112,17 @@ object AlterationPolicy { } } return when (newLesson) { - is WeekLesson -> - checkOverlapping(newLesson, allLesson) { - isNewLessonOverlapping(newLesson, it) - } - - is DateLesson -> - checkOverlapping(newLesson, allLesson) { + is WeekLesson, is DateLesson -> + allLesson.filter { isNewLessonOverlapping(newLesson, it) + }.any { + isOverlappingTime(it, newLesson) } else -> true } } - private fun checkOverlapping( - newLesson: CalendarEvent, - allLesson: List, - filter: (CalendarEvent) -> Boolean, - ) = - allLesson.filter(filter).any { - isOverlappingTime(it, newLesson) - } - /** * Checks if the event in the interval is already cancelled or rescheduled. *