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
3 changes: 2 additions & 1 deletion api/src/main/kotlin/controller/AuthController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,8 @@ class AuthController(
suspend fun verifyResetPasswordCode(
@RequestBody body: VerificationCodeRequest,
): OkResponse {
userService.verifyResetPasswordCode(body.userId!!, body.code)
val user = userService.getUser(body.userId!!)
userService.verifyResetPasswordCode(user, body.code)
return OkResponse()
}

Expand Down
15 changes: 15 additions & 0 deletions api/src/main/kotlin/controller/DiaryController.kt
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
package com.wafflestudio.snutt.controller

import com.wafflestudio.snutt.common.dto.OkResponse
import com.wafflestudio.snutt.common.enums.Semester
import com.wafflestudio.snutt.common.exception.DiaryTargetLectureNotFoundException
import com.wafflestudio.snutt.config.CurrentUser
import com.wafflestudio.snutt.diary.dto.DiaryDailyClassTypeDto
import com.wafflestudio.snutt.diary.dto.DiaryQuestionnaireDto
import com.wafflestudio.snutt.diary.dto.DiarySubmissionSummaryDto
import com.wafflestudio.snutt.diary.dto.DiarySubmissionsOfYearSemesterDto
import com.wafflestudio.snutt.diary.dto.DiaryTargetLectureDto
import com.wafflestudio.snutt.diary.dto.request.DiaryQuestionnaireRequestDto
import com.wafflestudio.snutt.diary.dto.request.DiarySubmissionRequestDto
import com.wafflestudio.snutt.diary.service.DiaryService
Expand All @@ -18,6 +21,7 @@ import org.springframework.web.bind.annotation.PathVariable
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
import org.springframework.web.bind.annotation.RestController

@RestController
Expand All @@ -38,6 +42,17 @@ class DiaryController(
diaryService.generateQuestionnaire(user.id!!, body.lectureId, body.dailyClassTypes),
)

@GetMapping("/target")
suspend fun getRandomTargetLecture(
@CurrentUser user: User,
@RequestParam year: Int,
@RequestParam semester: Semester,
): DiaryTargetLectureDto {
val targetLecture =
diaryService.getDiaryTargetLecture(user.id!!, year, semester, listOf()) ?: throw DiaryTargetLectureNotFoundException
return DiaryTargetLectureDto(targetLecture)
}

@GetMapping("/my")
suspend fun getMySubmissions(
@CurrentUser user: User,
Expand Down
42 changes: 0 additions & 42 deletions batch/src/main/kotlin/pre2025category/api/GoogleDocsApi.kt

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@ package com.wafflestudio.snutt.sugangsnu.common.service

import com.wafflestudio.snutt.common.enums.Semester
import com.wafflestudio.snutt.lectures.data.Lecture
import com.wafflestudio.snutt.pre2025category.service.CategoryPre2025FetchService
import com.wafflestudio.snutt.sugangsnu.common.SugangSnuRepository
import com.wafflestudio.snutt.sugangsnu.common.utils.SugangSnuClassTimeUtils
import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.ss.usermodel.Cell
import org.slf4j.LoggerFactory
import org.springframework.core.io.ResourceLoader
import org.springframework.stereotype.Service

interface SugangSnuFetchService {
Expand All @@ -20,16 +20,27 @@ interface SugangSnuFetchService {
@Service
class SugangSnuFetchServiceImpl(
private val sugangSnuRepository: SugangSnuRepository,
private val categoryPre2025FetchService: CategoryPre2025FetchService,
private val resourceLoader: ResourceLoader,
) : SugangSnuFetchService {
private val log = LoggerFactory.getLogger(javaClass)
private val quotaRegex = """(?<quota>\d+)(\s*\((?<quotaForCurrentStudent>\d+)\))?""".toRegex()
private val courseNumberCategoryPre2025Map: Map<String, String> by lazy {
resourceLoader
.getResource("classpath:categoryPre2025.txt")
.inputStream
.bufferedReader()
.lineSequence()
.filter { it.contains(":") }
.associate { line ->
val (courseNumber, category) = line.split(":", limit = 2)
courseNumber to category
}
}

override suspend fun getSugangSnuLectures(
year: Int,
semester: Semester,
): List<Lecture> {
val courseNumberCategoryPre2025Map = categoryPre2025FetchService.getCategoriesPre2025()
val koreanLectureXlsx = sugangSnuRepository.getSugangSnuLectures(year, semester, "ko")
val englishLectureXlsx = sugangSnuRepository.getSugangSnuLectures(year, semester, "en")
val koreanSheet = HSSFWorkbook(koreanLectureXlsx.asInputStream()).getSheetAt(0)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.wafflestudio.snutt.sugangsnu.job.sync.service

import com.wafflestudio.snutt.bookmark.repository.BookmarkRepository
import com.wafflestudio.snutt.common.exception.CoursebookRecentThanSugangSnuException
import com.wafflestudio.snutt.coursebook.data.Coursebook
import com.wafflestudio.snutt.coursebook.repository.CoursebookRepository
import com.wafflestudio.snutt.lecturebuildings.data.Campus
Expand Down Expand Up @@ -133,7 +134,7 @@ class SugangSnuSyncServiceImpl(
old,
new,
Lecture::class.memberProperties.filter {
it != Lecture::id && it.get(old) != it.get(new)
it != Lecture::id && it != Lecture::evInfo && it.get(old) != it.get(new)
},
)
}
Expand Down Expand Up @@ -211,7 +212,10 @@ class SugangSnuSyncServiceImpl(
private suspend fun syncLectures(compareResult: SugangSnuLectureCompareResult) {
val updatedLectures =
compareResult.updatedLectureList.map { diff ->
diff.newData.apply { id = diff.oldData.id }
diff.newData.apply {
id = diff.oldData.id
evInfo = diff.oldData.evInfo
}
}

lectureService.upsertLectures(compareResult.createdLectureList)
Expand Down Expand Up @@ -412,8 +416,18 @@ class SugangSnuSyncServiceImpl(
}
}

private fun Coursebook.isSyncedToSugangSnu(sugangSnuCoursebookCondition: SugangSnuCoursebookCondition): Boolean =
this.year == sugangSnuCoursebookCondition.latestYear && this.semester == sugangSnuCoursebookCondition.latestSemester
private fun Coursebook.isSyncedToSugangSnu(sugangSnuCoursebookCondition: SugangSnuCoursebookCondition): Boolean {
val sugangSnuCoursebook =
Coursebook(
year = sugangSnuCoursebookCondition.latestYear,
semester = sugangSnuCoursebookCondition.latestSemester,
)
return when {
sugangSnuCoursebook > this -> false
sugangSnuCoursebook < this -> throw CoursebookRecentThanSugangSnuException
else -> true
}
}
}

data class ParsedTags(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,8 @@ class VacancyNotifierServiceImpl(
}
lectureService.upsertLectures(updated)

val currentMinute = Instant.now().atZone(ZoneId.of("Asia/Seoul")).minute
val now = Instant.now().atZone(ZoneId.of("Asia/Seoul"))
val currentMinute = now.hour * 60 + now.minute
val targetTimeString =
vacantSeatRegistrationTimes
.filter { currentMinute < it.endMinute }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
"resources": {
"includes": [
{ "pattern": "org/apache/xmlbeans/.*\\.properties" },
{ "pattern": "org/apache/.*\\.xsb" }
{ "pattern": "org/apache/.*\\.xsb" },
{ "pattern": "categoryPre2025.txt" }
]
}
}
4 changes: 4 additions & 0 deletions batch/src/main/resources/application.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ spring:
name: ${job.name:EMPTY}
main:
web-application-type: none
task:
scheduling:
pool:
size: 0
---
spring:
config:
Expand Down
Loading