From dddf19813dd6e9f76ae7027a21b86f037f919c5f Mon Sep 17 00:00:00 2001 From: soohyeon Date: Fri, 11 Oct 2024 15:05:24 +0900 Subject: [PATCH 1/5] delete :: timetable save api --- .../timetable/presentation/TimetableController.kt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/presentation/TimetableController.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/presentation/TimetableController.kt index 1cc9112a..467b0c8a 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/presentation/TimetableController.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/presentation/TimetableController.kt @@ -4,13 +4,11 @@ import dsm.pick2024.domain.timetable.port.`in`.ModifyTimetableUseCase import dsm.pick2024.domain.timetable.port.`in`.QueryDayTimetableUseCase import dsm.pick2024.domain.timetable.port.`in`.QueryTeacherTimetableUseCase import dsm.pick2024.domain.timetable.port.`in`.QueryWeekTimetableUseCase -import dsm.pick2024.domain.timetable.port.`in`.SaveTimetableUseCase import dsm.pick2024.domain.timetable.presentation.dto.request.ChangeTimetableRequest import io.swagger.v3.oas.annotations.Operation import io.swagger.v3.oas.annotations.tags.Tag import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PatchMapping -import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestBody import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam @@ -20,16 +18,11 @@ import org.springframework.web.bind.annotation.RestController @RestController @RequestMapping("/timetable") class TimetableController( - private val saveTimetableUseCase: SaveTimetableUseCase, private val queryDayTimetableUseCase: QueryDayTimetableUseCase, private val queryWeekTimetableUseCase: QueryWeekTimetableUseCase, private val queryTeacherTimetableUseCase: QueryTeacherTimetableUseCase, private val modifyTimetableUseCase: ModifyTimetableUseCase ) { - @Operation(summary = "시간표 저장 API") - @PostMapping - fun saveTimetableInfo() = saveTimetableUseCase.saveTimetable() - @Operation(summary = "당일 시간표 조회 API") @GetMapping("/today") fun getTodayTimetable() = queryDayTimetableUseCase.queryDayTimetable() @@ -45,6 +38,10 @@ class TimetableController( @RequestParam(name = "class_num") classNum: Int ) = queryTeacherTimetableUseCase.queryTeacherTimetable(grade, classNum) +// +// @Operation(summary = "과목 전체 조회") +// @GetMapping("/subjects") +// fun getSubjectNames() = querySubjectNameUseCase.getAllSubjectNames() @Operation(summary = "시간표 수정") @PatchMapping("/change") From 6b7057960ef3fa1492a5a5065bd7154060e64d61 Mon Sep 17 00:00:00 2001 From: soohyeon Date: Fri, 11 Oct 2024 15:07:28 +0900 Subject: [PATCH 2/5] add :: save timetable schedule --- .../peristence/TimetablePersistenceAdapter.kt | 2 ++ .../timetable/port/out/DeleteTimeTablePort.kt | 5 +++ .../timetable/port/out/TimetablePort.kt | 3 +- .../timetable/service/SaveTimetableService.kt | 35 ++++++++++++++++++- .../schedule/ScheduleService.kt | 12 ++++++- 5 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 src/main/kotlin/dsm/pick2024/domain/timetable/port/out/DeleteTimeTablePort.kt diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/peristence/TimetablePersistenceAdapter.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/peristence/TimetablePersistenceAdapter.kt index 8cb08410..eac74a7f 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/peristence/TimetablePersistenceAdapter.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/peristence/TimetablePersistenceAdapter.kt @@ -19,6 +19,8 @@ class TimetablePersistenceAdapter( timetableRepository.save(timetableMapper.toEntity(timetable)) } + override fun deleteAll() = timetableRepository.deleteAll() + override fun saveAll(timetables: MutableList) { val entities = timetables.map { timetableMapper.toEntity(it) } timetableRepository.saveAll(entities) diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/DeleteTimeTablePort.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/DeleteTimeTablePort.kt new file mode 100644 index 00000000..ef78318d --- /dev/null +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/DeleteTimeTablePort.kt @@ -0,0 +1,5 @@ +package dsm.pick2024.domain.timetable.port.out + +interface DeleteTimeTablePort { + fun deleteAll() +} diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/TimetablePort.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/TimetablePort.kt index 3e3577c4..5d662c0b 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/TimetablePort.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/port/out/TimetablePort.kt @@ -2,4 +2,5 @@ package dsm.pick2024.domain.timetable.port.out interface TimetablePort : SaveTimetablePort, - QueryTimeTablePort + QueryTimeTablePort, + DeleteTimeTablePort diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt index 42f6116f..ecedf781 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt @@ -1,5 +1,6 @@ package dsm.pick2024.domain.timetable.service +import dsm.pick2024.domain.timetable.domain.Timetable import dsm.pick2024.domain.timetable.port.`in`.SaveTimetableUseCase import dsm.pick2024.domain.timetable.port.out.SaveTimetablePort import dsm.pick2024.infrastructure.feign.NeisTimetableFeignClientService @@ -16,6 +17,38 @@ class SaveTimetableService( override fun saveTimetable() { val timetableEntities = neisTimetableFeignClientService.getNeisInfoToEntity() - timetableEntities?.let { saveAllTimetablePort.saveAll(it) } + val updatedTimetableEntities = timetableEntities?.map { timetable -> + val cleanName = timetable.subjectName.replace(Regex("^\\(.*?\\)\\s*"), "") + + val updatedSubjectName = when (cleanName) { + "* 데이터베이스 구현", "* SQL활용" -> "DB 프로그래밍" + "* 응용SW 변경관리" -> "응용SW 변경관리" + "* 응용SW 운영관리" -> "디지털 포렌식" + "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" + "* 정보통신기기 펌웨어구현" -> "정보통신기기 펌웨어구현" + "* 분석 데이터 전처리" -> "빅데이터 분석" + "* 빅데이터 분석 결과 시각화" -> "빅데이터 분석" + "* 시스템 유지보수관리" -> "시스템 유지보수관리" + "* 시스템 점검관리" -> "시스템 점검관리" + "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" + "자율활동" -> "창체" + "자료구조와 알고리즘" -> "자료구조" + "빅데이터 분석 결과 시각화" -> "빅데이터 분석" + "미술 창작" -> "미술" + "동아리활동" -> "창체" + else -> timetable.subjectName + } + + Timetable( + id = timetable.id, + grade = timetable.grade, + classNum = timetable.classNum, + period = timetable.period, + subjectName = updatedSubjectName, + dayWeek = timetable.dayWeek + ) + }?.toMutableList() + + updatedTimetableEntities?.let { saveAllTimetablePort.saveAll(it) } } } diff --git a/src/main/kotlin/dsm/pick2024/infrastructure/schedule/ScheduleService.kt b/src/main/kotlin/dsm/pick2024/infrastructure/schedule/ScheduleService.kt index 56661e47..a5f6671b 100644 --- a/src/main/kotlin/dsm/pick2024/infrastructure/schedule/ScheduleService.kt +++ b/src/main/kotlin/dsm/pick2024/infrastructure/schedule/ScheduleService.kt @@ -6,6 +6,8 @@ import dsm.pick2024.domain.attendance.port.`in`.ResetAttendanceUseCase import dsm.pick2024.domain.classroom.port.out.DeleteClassRoomPort import dsm.pick2024.domain.meal.port.`in`.MealUseCase import dsm.pick2024.domain.status.port.`in`.ResetStatusUseCase +import dsm.pick2024.domain.timetable.port.`in`.SaveTimetableUseCase +import dsm.pick2024.domain.timetable.port.out.DeleteTimeTablePort import dsm.pick2024.domain.weekendmeal.port.`in`.ResetWeekendMealUseCase import org.springframework.scheduling.annotation.Scheduled import org.springframework.stereotype.Component @@ -15,10 +17,12 @@ class ScheduleService( private val deleteClassRoomPort: DeleteClassRoomPort, private val deleteApplicationPort: DeleteApplicationPort, private val deleteAfterSchoolStudentPort: DeleteAfterSchoolStudentPort, + private val deleteTimetablePort: DeleteTimeTablePort, private val mealUseCase: MealUseCase, private val resetAttendanceUseCase: ResetAttendanceUseCase, private val resetWeekendMealUseCase: ResetWeekendMealUseCase, - private val resetStatusUseCase: ResetStatusUseCase + private val resetStatusUseCase: ResetStatusUseCase, + private val saveTimetableUseCase: SaveTimetableUseCase ) { @Scheduled(cron = "0 30 20 * * ?", zone = "Asia/Seoul") fun deleteTable() { @@ -38,4 +42,10 @@ class ScheduleService( resetAttendanceUseCase.resetAttendance() resetStatusUseCase.reset() } + + @Scheduled(cron = "0 14 * * SUN") + fun saveTimetable() { + deleteTimetablePort.deleteAll() + saveTimetableUseCase.saveTimetable() + } } From 360e0d3d577626d3056561a3199666419f7b9a09 Mon Sep 17 00:00:00 2001 From: soohyeon Date: Fri, 11 Oct 2024 15:26:10 +0900 Subject: [PATCH 3/5] refactor --- .../domain/timetable/service/SaveTimetableService.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt index ecedf781..d0f964b0 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt @@ -26,17 +26,15 @@ class SaveTimetableService( "* 응용SW 운영관리" -> "디지털 포렌식" "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" "* 정보통신기기 펌웨어구현" -> "정보통신기기 펌웨어구현" - "* 분석 데이터 전처리" -> "빅데이터 분석" - "* 빅데이터 분석 결과 시각화" -> "빅데이터 분석" + "* 빅데이터 분석 결과 시각화", "빅데이터 분석 결과 시각화" -> "빅데이터 분석" "* 시스템 유지보수관리" -> "시스템 유지보수관리" "* 시스템 점검관리" -> "시스템 점검관리" "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" "자율활동" -> "창체" "자료구조와 알고리즘" -> "자료구조" - "빅데이터 분석 결과 시각화" -> "빅데이터 분석" "미술 창작" -> "미술" "동아리활동" -> "창체" - else -> timetable.subjectName + else -> cleanName } Timetable( From 366dafdb311f87110d5bd0e7962217513a6aa3f8 Mon Sep 17 00:00:00 2001 From: soohyeon Date: Fri, 11 Oct 2024 15:27:06 +0900 Subject: [PATCH 4/5] refactor --- .../pick2024/domain/timetable/service/SaveTimetableService.kt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt index d0f964b0..65ae7d33 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt @@ -30,10 +30,9 @@ class SaveTimetableService( "* 시스템 유지보수관리" -> "시스템 유지보수관리" "* 시스템 점검관리" -> "시스템 점검관리" "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" - "자율활동" -> "창체" + "자율활동", "동아리활동" -> "창체" "자료구조와 알고리즘" -> "자료구조" "미술 창작" -> "미술" - "동아리활동" -> "창체" else -> cleanName } From 7a129026b8e629ff70991b6f890844a26b0f4026 Mon Sep 17 00:00:00 2001 From: soohyeon Date: Fri, 11 Oct 2024 15:51:03 +0900 Subject: [PATCH 5/5] modify :: add fun --- .../timetable/service/SaveTimetableService.kt | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt index 65ae7d33..8db452db 100644 --- a/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt +++ b/src/main/kotlin/dsm/pick2024/domain/timetable/service/SaveTimetableService.kt @@ -18,34 +18,37 @@ class SaveTimetableService( val timetableEntities = neisTimetableFeignClientService.getNeisInfoToEntity() val updatedTimetableEntities = timetableEntities?.map { timetable -> - val cleanName = timetable.subjectName.replace(Regex("^\\(.*?\\)\\s*"), "") - - val updatedSubjectName = when (cleanName) { - "* 데이터베이스 구현", "* SQL활용" -> "DB 프로그래밍" - "* 응용SW 변경관리" -> "응용SW 변경관리" - "* 응용SW 운영관리" -> "디지털 포렌식" - "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" - "* 정보통신기기 펌웨어구현" -> "정보통신기기 펌웨어구현" - "* 빅데이터 분석 결과 시각화", "빅데이터 분석 결과 시각화" -> "빅데이터 분석" - "* 시스템 유지보수관리" -> "시스템 유지보수관리" - "* 시스템 점검관리" -> "시스템 점검관리" - "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" - "자율활동", "동아리활동" -> "창체" - "자료구조와 알고리즘" -> "자료구조" - "미술 창작" -> "미술" - else -> cleanName - } + val subject = updatedSubjectName(timetable.subjectName) Timetable( id = timetable.id, grade = timetable.grade, classNum = timetable.classNum, period = timetable.period, - subjectName = updatedSubjectName, + subjectName = subject, dayWeek = timetable.dayWeek ) }?.toMutableList() updatedTimetableEntities?.let { saveAllTimetablePort.saveAll(it) } } + + private fun updatedSubjectName(subjectName: String): String { + val cleanName = subjectName.replace(Regex("^\\(.*?\\)\\s*"), "") + + return when (cleanName) { + "* 데이터베이스 구현", "* SQL활용" -> "DB 프로그래밍" + "* 응용SW 변경관리" -> "응용SW 변경관리" + "* 응용SW 운영관리" -> "디지털 포렌식" + "* 정보통신기기 PCB보드 개발" -> "정보통신기기 PCB보드 개발" + "* 정보통신기기 펌웨어구현" -> "정보통신기기 펌웨어구현" + "* 빅데이터 분석 결과 시각화", "빅데이터 분석 결과 시각화" -> "빅데이터 분석" + "* 시스템 유지보수관리" -> "시스템 유지보수관리" + "* 시스템 점검관리" -> "시스템 점검관리" + "자율활동", "동아리활동" -> "창체" + "자료구조와 알고리즘" -> "자료구조" + "미술 창작" -> "미술" + else -> cleanName + } + } }