From 89ee820e8f131f9110121841d13c5d986a5c2b5a Mon Sep 17 00:00:00 2001 From: dwl21 Date: Fri, 14 Feb 2025 00:02:39 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20=EA=B0=95=EC=9D=98=20=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=EC=9D=80=201=EB=B2=88=EB=A7=8C=20=EC=A1=B0=ED=9A=8C=ED=95=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../soongpt/domain/course/implement/CoursesFactory.kt | 5 +++-- .../domain/timetable/implement/TimeTableFactory.kt | 2 +- .../timetable/implement/TimetableCandidateFactory.kt | 11 +++++++++-- .../domain/timetable/implement/CoursesFactoryTest.kt | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/com/yourssu/soongpt/domain/course/implement/CoursesFactory.kt b/src/main/kotlin/com/yourssu/soongpt/domain/course/implement/CoursesFactory.kt index 8aaff45..7dbe5bd 100644 --- a/src/main/kotlin/com/yourssu/soongpt/domain/course/implement/CoursesFactory.kt +++ b/src/main/kotlin/com/yourssu/soongpt/domain/course/implement/CoursesFactory.kt @@ -9,13 +9,14 @@ class CoursesFactory( private const val MAX_RATING = 70.0 } - fun generateTimetableCandidates(): List { + fun generateTimetableCandidates(): Pair, Courses> { val timetableCandidates = values.fold(listOf(emptyList())) { acc, courses -> acc.flatMap { currentCombination -> courses.values.map { course -> currentCombination + course } } }.map { Courses(it) } - return timetableCandidates + val courses = Courses(values.flatMap { it.values }) + return Pair(timetableCandidates, courses) } fun districtDuplicatedCourses(target: List): CoursesFactory { diff --git a/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimeTableFactory.kt b/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimeTableFactory.kt index 4fdf5a2..45602b5 100644 --- a/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimeTableFactory.kt +++ b/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimeTableFactory.kt @@ -44,7 +44,7 @@ class TimeTableFactory( val step1 = CoursesFactory(majorRequiredCourses + majorElectiveCourses + generalRequiredCourses + chapels) .generateTimetableCandidates() - val step2 = timetableCandidateFactory.createTimetableCandidatesWithRule(step1) + val step2 = timetableCandidateFactory.createTimetableCandidatesWithRule(step1.first, step1.second) val majorElectives = Courses(courseReader.findAllByDepartmentGradeIdInMajorElective(departmentGrade.id!!)) val availableMajorElectiveCredit = calculateAvailableMajorElective(command, majorElectiveCourses) diff --git a/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimetableCandidateFactory.kt b/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimetableCandidateFactory.kt index 0a8b623..15465cf 100644 --- a/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimetableCandidateFactory.kt +++ b/src/main/kotlin/com/yourssu/soongpt/domain/timetable/implement/TimetableCandidateFactory.kt @@ -1,6 +1,7 @@ package com.yourssu.soongpt.domain.timetable.implement import com.yourssu.soongpt.domain.course.implement.Courses +import com.yourssu.soongpt.domain.courseTime.implement.CourseTime import com.yourssu.soongpt.domain.courseTime.implement.CourseTimeReader import com.yourssu.soongpt.domain.timetable.implement.exception.TimetableCreatedBadRequestException import com.yourssu.soongpt.domain.timetable.implement.strategy.NoMorningClassesStrategy.Companion.MORNING_CLASSES_SCORE @@ -17,14 +18,20 @@ class TimetableCandidateFactory( const val TOTAL = 5 } - fun createTimetableCandidatesWithRule(coursesCandidates: List): TimetableCandidates { + fun createTimetableCandidatesWithRule(coursesCandidates: List, courses: Courses): TimetableCandidates { if (validateEmptyCase(coursesCandidates)) { return TimetableCandidates(TimetableCandidate.empty()) } + val courseTimes = HashMap>() + for (courseId in courses.getAllIds()) { + courseTimes[courseId] = courseTimeReader.findAllByCourseId(courseId) + } val timetableCandidates= TimetableCandidates(coursesCandidates.flatMap { TimetableCandidate.fromAllTags( courses = it, - coursesTimes = CourseTimes(courseTimeReader.findAllByCourseIds(it.getAllIds())), + coursesTimes = CourseTimes(it.getAllIds() + .map { courseId -> courseTimes[courseId]?: listOf() } + .flatten()), ) }).filterRules() validateNoneTimetableCases(timetableCandidates) diff --git a/src/test/kotlin/com/yourssu/soongpt/domain/timetable/implement/CoursesFactoryTest.kt b/src/test/kotlin/com/yourssu/soongpt/domain/timetable/implement/CoursesFactoryTest.kt index fd9fe65..f82b997 100644 --- a/src/test/kotlin/com/yourssu/soongpt/domain/timetable/implement/CoursesFactoryTest.kt +++ b/src/test/kotlin/com/yourssu/soongpt/domain/timetable/implement/CoursesFactoryTest.kt @@ -25,7 +25,7 @@ class CoursesFactoryTest { fun success() { val coursesFactory = CoursesFactory(listOf(courses, courses)) - val actual = coursesFactory.generateTimetableCandidates() + val actual = coursesFactory.generateTimetableCandidates().first assertThat(actual).hasSize(4) } }