Skip to content
This repository has been archived by the owner on Oct 23, 2023. It is now read-only.

Commit

Permalink
chore(school): remove duplication in AlterationPolicy
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreaBrighi committed Jul 9, 2023
1 parent 4c0ba40 commit f1d5910
Showing 1 changed file with 13 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 &&
Expand All @@ -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<CalendarEvent>,
filter: (CalendarEvent) -> Boolean,
) =
allLesson.filter(filter).any {
isOverlappingTime(it, newLesson)
}

/**
* Checks if the event in the interval is already cancelled or rescheduled.
*
Expand Down

0 comments on commit f1d5910

Please sign in to comment.