Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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 {
Expand Down Expand Up @@ -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())
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,20 @@ class OldNoticeController(
@RequestParam(name = "page", defaultValue = "1") page: Int,
@RequestParam(name = "size", defaultValue = "20") size: Int,
): ResponseEntity<List<NoticeResponse>> {
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)
}

Expand All @@ -54,7 +66,19 @@ class OldNoticeController(
@RequestParam(name = "page", defaultValue = "1") page: Int,
@RequestParam(name = "size", defaultValue = "20") size: Int,
): ResponseEntity<List<NoticeResponse>> {
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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,18 @@ class OldSubscribeController(
@Operation(summary = "[구버전] 학사 알림 구독", description = "학사 알림을 받도록 설정한다.")
@PostMapping("/department/v1/dmu/updateDepartment")
fun oldDepartmentSubscribe(@RequestBody departmentRequest: OldDepartmentRequest): ResponseEntity<Void> {
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()
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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");
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -15,10 +14,10 @@ class DepartmentNoticeParser(
private val htmlLoader: HtmlLoader<Document>,
) {

private lateinit var major: Major
private lateinit var major: DepartmentCrawlingPath
private var pageNumber: Int = 1

fun parse(major: Major): List<Notice> {
fun parse(major: DepartmentCrawlingPath): List<Notice> {
initialize(major)

val document = htmlLoader.get(generateSearchUrl())
Expand All @@ -29,7 +28,7 @@ class DepartmentNoticeParser(

}

private fun initialize(major: Major) {
private fun initialize(major: DepartmentCrawlingPath) {
this.major = major
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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 생성에 실패했습니다.")
}
Expand Down
Loading