diff --git a/dmforu-admin/src/main/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingService.kt b/dmforu-admin/src/main/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingService.kt index b17a3f9..3f9aa81 100644 --- a/dmforu-admin/src/main/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingService.kt +++ b/dmforu-admin/src/main/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingService.kt @@ -1,9 +1,9 @@ package com.dmforu.admin.scheduler.crawling +import com.dmforu.crawling.parser.DepartmentCrawlingPath import com.dmforu.crawling.parser.DepartmentNoticeParser import com.dmforu.domain.notice.* import org.springframework.beans.factory.ObjectProvider -import org.springframework.context.ApplicationEventPublisher import org.springframework.stereotype.Service @Service @@ -14,12 +14,12 @@ class DepartmentNoticeCrawlingService( ) { fun addRecentDepartmentNotice() { - for (major in Major.entries) { + for (major in DepartmentCrawlingPath.entries) { crawlMajorDepartment(major) } } - private fun crawlMajorDepartment(major: Major) { + private fun crawlMajorDepartment(major: DepartmentCrawlingPath) { val parser = prototypeBeanProvider.getObject() val maxNumber = noticeReader.findMaxNumberByType(major.type) diff --git a/dmforu-admin/src/test/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingServiceTest.kt b/dmforu-admin/src/test/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingServiceTest.kt index b661821..a85842c 100644 --- a/dmforu-admin/src/test/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingServiceTest.kt +++ b/dmforu-admin/src/test/kotlin/com/dmforu/admin/scheduler/crawling/DepartmentNoticeCrawlingServiceTest.kt @@ -1,11 +1,9 @@ package com.dmforu.admin.scheduler.crawling +import com.dmforu.crawling.parser.DepartmentCrawlingPath import com.dmforu.crawling.parser.DepartmentNoticeParser -import com.dmforu.domain.notice.Major import com.dmforu.domain.notice.Notice import com.dmforu.domain.notice.NoticeReader -import com.dmforu.domain.notice.NoticeWriter -import org.junit.jupiter.api.Assertions.* import org.junit.jupiter.api.DisplayName import org.junit.jupiter.api.Test import org.junit.jupiter.api.extension.ExtendWith @@ -16,7 +14,6 @@ import org.mockito.Mockito.* import org.mockito.junit.jupiter.MockitoExtension import org.mockito.kotlin.any import org.springframework.beans.factory.ObjectProvider -import org.springframework.context.ApplicationEventPublisher @ExtendWith(MockitoExtension::class) class DepartmentNoticeCrawlingServiceTest { @@ -54,8 +51,8 @@ class DepartmentNoticeCrawlingServiceTest { service.addRecentDepartmentNotice() // then - verify(prototypeBeanProvider, times(Major.entries.size)).getObject() - verify(noticeReader, times(Major.entries.size)).findMaxNumberByType(any()) + verify(prototypeBeanProvider, times(DepartmentCrawlingPath.entries.size)).getObject() + verify(noticeReader, times(DepartmentCrawlingPath.entries.size)).findMaxNumberByType(any()) } } \ No newline at end of file diff --git a/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldNoticeController.kt b/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldNoticeController.kt index d1b1fa9..26791cd 100644 --- a/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldNoticeController.kt +++ b/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldNoticeController.kt @@ -38,8 +38,20 @@ class OldNoticeController( @RequestParam(name = "page", defaultValue = "1") page: Int, @RequestParam(name = "size", defaultValue = "20") size: Int, ): ResponseEntity> { - val departmentNotices = - noticeReader.readDepartmentNotice(department, page, size).map { NoticeResponse.form(it) } + val checkDepartment = when (department) { + "로봇공학과" -> { + "로봇소프트웨어과" + } + "컴퓨터정보공학과" -> { + "웹응용소프트웨어공학과" + } + else -> { + department + } + } + + val departmentNotices = noticeReader.readDepartmentNotice(checkDepartment, page, size) + .map { NoticeResponse.form(it) } return ResponseEntity.ok().body(departmentNotices) } @@ -54,7 +66,19 @@ class OldNoticeController( @RequestParam(name = "page", defaultValue = "1") page: Int, @RequestParam(name = "size", defaultValue = "20") size: Int, ): ResponseEntity> { - val notices = noticeReader.searchNotice(searchWord, department, page, size).map { NoticeResponse.form(it) } + val checkDepartment = when (department) { + "로봇공학과" -> { + "로봇소프트웨어과" + } + "컴퓨터정보공학과" -> { + "웹응용소프트웨어공학과" + } + else -> { + department + } + } + + val notices = noticeReader.searchNotice(searchWord, checkDepartment, page, size).map { NoticeResponse.form(it) } return ResponseEntity.ok().body(notices) } } \ No newline at end of file diff --git a/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldSubscribeController.kt b/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldSubscribeController.kt index 8365566..258454c 100644 --- a/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldSubscribeController.kt +++ b/dmforu-api/src/main/kotlin/com/dmforu/api/controller/old/OldSubscribeController.kt @@ -29,7 +29,18 @@ class OldSubscribeController( @Operation(summary = "[구버전] 학사 알림 구독", description = "학사 알림을 받도록 설정한다.") @PostMapping("/department/v1/dmu/updateDepartment") fun oldDepartmentSubscribe(@RequestBody departmentRequest: OldDepartmentRequest): ResponseEntity { - oldSubscribeUpdater.subscribeDepartment(token = departmentRequest.token, department = departmentRequest.department) + val checkDepartment = when (departmentRequest.department) { + "로봇공학과" -> { + "로봇소프트웨어과" + } + "컴퓨터정보공학과" -> { + "웹응용소프트웨어공학과" + } + else -> { + departmentRequest.department + } + } + oldSubscribeUpdater.subscribeDepartment(token = departmentRequest.token, department = checkDepartment) return ResponseEntity.ok().build() } diff --git a/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentCrawlingPath.kt b/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentCrawlingPath.kt new file mode 100644 index 0000000..d05b8a8 --- /dev/null +++ b/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentCrawlingPath.kt @@ -0,0 +1,42 @@ +package com.dmforu.crawling.parser + +enum class DepartmentCrawlingPath (val type: String, val majorPath: String, val noticePath: String) { + // 기계공학부 + MECHANICAL_ENGINEERING_DEPARTMENT("기계공학과", "dmu_23205", "1707"), + MECHANICAL_DESIGN_ENGINEERING("기계설계공학과", "dmu_23207", "1716"), + + // 로봇자동화공학부 + AUTOMATION_ENGINEERING("자동화공학과", "dmu_23209", "1728"), + ROBOT_SOFTWARE_ENGINEERING("로봇소프트웨어과", "dmu_23211", "1737"), + + // 전기전자통신공학부 + ELECTRICAL_ENGINEERING("전기공학과", "dmu_23212", "1749"), + INFORMATION_ELECTRONIC_ENGINEERING("정보전자공학과", "dmu_23214", "1758"), + SEMICONDUCTOR_ELECTRONIC_ENGINEERING("반도체전자공학과", "dmu_23216", "1767"), + INFORMATION_COMMUNICATION_ENGINEERING("정보통신공학과", "dmu_23218", "1776"), + FIRE_SAFETY_MANAGEMENT("소방안전관리과", "dmu_23268", "2503"), + + // 컴퓨터공학부 + WEB_APPLIED_SOFTWARE_ENGINEERING("웹응용소프트웨어공학과", "dmu_23220", "1788"), + COMPUTER_SOFTWARE_ENGINEERING("컴퓨터소프트웨어공학과", "dmu_23222", "1797"), + AI_SOFTWARE_ENGINEERING("인공지능소프트웨어학과", "dmu_23259", "1806"), + + // 생활환경공학부 + BIO_CHEMICAL_ENGINEERING("생명화학공학과", "dmu_23245", "1818"), + BIO_CONVERGENCE_ENGINEERING("바이오융합공학과", "dmu_23264", "1827"), + ARCHITECTURE("건축과", "dmu_23015", "1836"), + INTERIOR_ARCHITECTURE_DESIGN("실내건축디자인과", "dmu_23256", "1845"), + VISUAL_DESIGN("시각디자인과", "dmu_23068", "1854"), + AR_VR_CONTENTS_DESIGN("AR-VR콘텐츠디자인과", "dmu_23269", "2633"), + + // 경영학부 + BUSINESS_MANAGEMENT("경영학과", "dmu_23232", "1866"), + TAX_ACCOUNTING("세무회계학과", "dmu_23234", "1875"), + DISTRIBUTION_MARKETING("유통마케팅학과", "dmu_23236", "1884"), + HOTEL_TOURISM("호텔관광학과", "dmu_23250", "1893"), + BUSINESS_INFORMATION("경영정보학과", "dmu_23238", "1902"), + BIG_DATA_MANAGEMENT("빅데이터경영과", "dmu_23260", "1911"), + + // 자유전공학과 https://www.dongyang.ac.kr/dmu_23274/3071/subview.do + UNDECLARED_MAJOR("자유전공학과", "dmu_23274", "3071"); +} \ No newline at end of file diff --git a/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParser.kt b/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParser.kt index 0afb9f5..8780726 100644 --- a/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParser.kt +++ b/dmforu-crawling/src/main/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParser.kt @@ -3,7 +3,6 @@ package com.dmforu.crawling.parser import com.dmforu.crawling.exception.GenerateNoticeUrlException import com.dmforu.crawling.loader.HtmlLoader import com.dmforu.domain.notice.Notice -import com.dmforu.domain.notice.Major import org.jsoup.nodes.Document import org.jsoup.nodes.Element import java.time.LocalDate @@ -15,10 +14,10 @@ class DepartmentNoticeParser( private val htmlLoader: HtmlLoader, ) { - private lateinit var major: Major + private lateinit var major: DepartmentCrawlingPath private var pageNumber: Int = 1 - fun parse(major: Major): List { + fun parse(major: DepartmentCrawlingPath): List { initialize(major) val document = htmlLoader.get(generateSearchUrl()) @@ -29,7 +28,7 @@ class DepartmentNoticeParser( } - private fun initialize(major: Major) { + private fun initialize(major: DepartmentCrawlingPath) { this.major = major } diff --git a/dmforu-crawling/src/test/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParserTest.kt b/dmforu-crawling/src/test/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParserTest.kt index 1e7edd5..0fa1b39 100644 --- a/dmforu-crawling/src/test/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParserTest.kt +++ b/dmforu-crawling/src/test/kotlin/com/dmforu/crawling/parser/DepartmentNoticeParserTest.kt @@ -52,7 +52,7 @@ class DepartmentNoticeParserTest { given(htmlLoader.get(anyString())).willReturn(document) // when - val notices = parser.parse(Major.COMPUTER_SOFTWARE_ENGINEERING) + val notices = parser.parse(DepartmentCrawlingPath.COMPUTER_SOFTWARE_ENGINEERING) // then assertThat(notices).hasSize(2) @@ -104,7 +104,7 @@ class DepartmentNoticeParserTest { given(htmlLoader.get(anyString())).willReturn(document) // when // then - assertThatThrownBy { parser.parse(Major.COMPUTER_SOFTWARE_ENGINEERING) } + assertThatThrownBy { parser.parse(DepartmentCrawlingPath.COMPUTER_SOFTWARE_ENGINEERING) } .isInstanceOf(GenerateNoticeUrlException::class.java) .hasMessage("공지 URL 생성에 실패했습니다.") }