Skip to content

Commit

Permalink
기존 snutt 레거시 스펙 제거 (#342)
Browse files Browse the repository at this point in the history
  • Loading branch information
Hank-Choi authored Feb 15, 2025
1 parent 70d057f commit 5376fc1
Show file tree
Hide file tree
Showing 17 changed files with 16 additions and 313 deletions.
11 changes: 0 additions & 11 deletions api/src/main/kotlin/handler/DeviceHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.wafflestudio.snutt.handler
import com.wafflestudio.snutt.common.dto.OkResponse
import com.wafflestudio.snutt.middleware.SnuttRestApiDefaultMiddleware
import com.wafflestudio.snutt.notification.service.DeviceService
import com.wafflestudio.snutt.users.data.User
import com.wafflestudio.snutt.users.service.UserNicknameService
import com.wafflestudio.snutt.users.service.UserService
import org.springframework.stereotype.Component
Expand All @@ -24,19 +23,9 @@ class DeviceHandler(
val registrationId = req.pathVariable("id")
deviceService.addRegistrationId(userId, registrationId, clientInfo)

updateIfUserNicknameNull(req.getContext().user!!)
OkResponse()
}

// TODO 회원가입 API (SNUTT -> SNU4T) 마이그레이션 완료 이후 삭제
// context: https://wafflestudio.slack.com/archives/C0PAVPS5T/p1690711859658779
private suspend fun updateIfUserNicknameNull(user: User) {
if (user.nickname.isNullOrEmpty()) {
val nickname = userNicknameService.generateUniqueRandomNickname()
userService.update(user.copy(nickname = nickname))
}
}

suspend fun removeRegistrationId(req: ServerRequest) =
handle(req) {
val userId = req.userId
Expand Down
4 changes: 2 additions & 2 deletions api/src/main/kotlin/handler/FriendHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class FriendHandler(
id = friend.id!!,
userId = partner.id!!,
displayName = partnerDisplayName,
nickname = userNicknameService.getNicknameDto(partner.nickname!!),
nickname = userNicknameService.getNicknameDto(partner.nickname),
createdAt = friend.createdAt,
)
}
Expand Down Expand Up @@ -104,7 +104,7 @@ class FriendHandler(
id = friend.id!!,
userId = partner.id!!,
displayName = friend.getPartnerDisplayName(userId),
nickname = userNicknameService.getNicknameDto(partner.nickname!!),
nickname = userNicknameService.getNicknameDto(partner.nickname),
createdAt = friend.createdAt,
)
}
Expand Down
36 changes: 1 addition & 35 deletions api/src/main/kotlin/handler/LectureSearchHandler.kt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.wafflestudio.snutt.handler

import com.fasterxml.jackson.annotation.JsonProperty
import com.wafflestudio.snutt.common.enum.DayOfWeek
import com.wafflestudio.snutt.common.enum.Semester
import com.wafflestudio.snutt.lectures.dto.SearchDto
import com.wafflestudio.snutt.lectures.dto.SearchTimeDto
Expand Down Expand Up @@ -39,8 +38,6 @@ data class SearchQueryLegacy(
val academicYear: List<String>? = null,
val department: List<String>? = null,
val category: List<String>? = null,
@JsonProperty("time_mask")
val timeMask: List<Int>? = null,
val times: List<SearchTimeDto>? = null,
val timesToExclude: List<SearchTimeDto>? = null,
val etc: List<String>? = null,
Expand All @@ -62,7 +59,7 @@ data class SearchQueryLegacy(
department = department,
category = category,
etcTags = etc,
times = times?.takeIf { it.isNotEmpty() } ?: bitmaskToClassTime(timeMask),
times = times,
timesToExclude = timesToExclude,
page = page,
offset = offset,
Expand All @@ -71,35 +68,4 @@ data class SearchQueryLegacy(
categoryPre2025 = categoryPre2025,
)
}

/*
기존 timeMask 스펙을 대응하기 위한 코드
8시부터 23시까지 30분 단위로 강의가 존재하는 경우 1, 존재하지 않는 경우 0인 2진수가 전달된다.
이를 searchTimeDto로 변환
ex) 111000... -> 8:00~9:30 수업 -> startMinute = 480, endMinute: 570
*/
private fun bitmaskToClassTime(timeMask: List<Int>?): List<SearchTimeDto>? =
timeMask?.flatMapIndexed { dayValue, mask ->
mask.toTimeMask().zip((mask shr 1).toTimeMask())
.foldIndexed(emptyList()) { index, acc, (bit, bitBefore) ->
if (bit && !bitBefore) {
acc +
SearchTimeDto(
day = DayOfWeek.getOfValue(dayValue)!!,
startMinute = index * 30 + 8 * 60,
endMinute = index * 30 + 8 * 60 + 30,
)
} else if (bit && bitBefore) {
val updated = acc.last().copy(endMinute = index * 30 + 8 * 60 + 30)
acc.dropLast(1) + updated
} else {
acc
}
}
}

/*
ex) 258048 -> 2진수 00000000000000111111000000000000 -> [..., true, true, true, true, true, true, false, false, ...]
*/
private fun Int.toTimeMask(): List<Boolean> = this.toString(2).padStart(30, '0').map { it == '1' }
}
2 changes: 1 addition & 1 deletion api/src/main/kotlin/handler/UserHandler.kt
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,6 @@ class UserHandler(
email = user.email,
localId = user.credential.localId,
fbName = user.credential.fbName,
nickname = userNicknameService.getNicknameDto(user.nickname!!),
nickname = userNicknameService.getNicknameDto(user.nickname),
)
}
103 changes: 0 additions & 103 deletions batch/src/main/kotlin/users/job/UserNicknameCreateJobConfig.kt

This file was deleted.

4 changes: 2 additions & 2 deletions core/src/main/kotlin/friend/service/FriendService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ class FriendServiceImpl(
fromUser: User,
toUserId: String,
) {
val fromUserNickname = userNicknameService.getNicknameDto(fromUser.nickname!!).nickname
val fromUserNickname = userNicknameService.getNicknameDto(fromUser.nickname).nickname
val pushMessage =
PushMessage(
title = "친구 요청",
Expand Down Expand Up @@ -164,7 +164,7 @@ class FriendServiceImpl(
fromUserId: String,
toUser: User,
) {
val toUserNickname = userNicknameService.getNicknameDto(toUser.nickname!!).nickname
val toUserNickname = userNicknameService.getNicknameDto(toUser.nickname).nickname
val pushMessage =
PushMessage(
title = "친구 요청 수락",
Expand Down
5 changes: 0 additions & 5 deletions core/src/main/kotlin/lectures/dto/BookmarkLectureDto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package com.wafflestudio.snutt.lectures.dto
import com.fasterxml.jackson.annotation.JsonProperty
import com.wafflestudio.snutt.evaluation.dto.SnuttEvLectureSummaryDto
import com.wafflestudio.snutt.lectures.data.BookmarkLecture
import com.wafflestudio.snutt.lectures.utils.ClassTimeUtils

data class BookmarkLectureDto(
@JsonProperty("_id")
Expand All @@ -27,9 +26,6 @@ data class BookmarkLectureDto(
@JsonProperty("course_title")
var courseTitle: String,
val snuttEvLecture: SnuttEvLectureSummaryDto? = null,
// FIXME: 안드로이드 구버전 대응용 필드 1년 후 2024년에 삭제 (2023/06/26)
@JsonProperty("class_time_mask")
val classTimeMask: List<Int> = emptyList(),
)

fun BookmarkLectureDto(
Expand All @@ -52,5 +48,4 @@ fun BookmarkLectureDto(
courseNumber = lecture.courseNumber,
courseTitle = lecture.courseTitle,
snuttEvLecture = snuttEvLecture,
classTimeMask = ClassTimeUtils.classTimeToBitmask(lecture.classPlaceAndTimes),
)
6 changes: 0 additions & 6 deletions core/src/main/kotlin/lectures/dto/ClassPlaceAndTimeDto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ package com.wafflestudio.snutt.lectures.dto

import com.fasterxml.jackson.annotation.JsonProperty
import com.wafflestudio.snutt.common.enum.DayOfWeek
import com.wafflestudio.snutt.lecturebuildings.data.LectureBuilding
import com.wafflestudio.snutt.lecturebuildings.data.PlaceInfo
import com.wafflestudio.snutt.lectures.data.ClassPlaceAndTime
import com.wafflestudio.snutt.lectures.utils.endPeriod
import com.wafflestudio.snutt.lectures.utils.minuteToString
Expand Down Expand Up @@ -37,7 +35,6 @@ data class ClassPlaceAndTimeLegacyDto(
val periodLength: Double,
@JsonProperty("start")
val startPeriod: Double,
var lectureBuildings: List<LectureBuilding>? = null,
)

fun ClassPlaceAndTimeLegacyDto(classPlaceAndTime: ClassPlaceAndTime): ClassPlaceAndTimeLegacyDto =
Expand All @@ -51,6 +48,3 @@ fun ClassPlaceAndTimeLegacyDto(classPlaceAndTime: ClassPlaceAndTime): ClassPlace
startPeriod = classPlaceAndTime.startPeriod,
periodLength = classPlaceAndTime.endPeriod - classPlaceAndTime.startPeriod,
)

val ClassPlaceAndTimeLegacyDto.placeInfos: List<PlaceInfo>
get() = place?.let { PlaceInfo.getValuesOf(it) } ?: emptyList()
5 changes: 0 additions & 5 deletions core/src/main/kotlin/lectures/dto/LectureDto.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonProperty
import com.wafflestudio.snutt.common.enum.Semester
import com.wafflestudio.snutt.evaluation.dto.SnuttEvLectureSummaryDto
import com.wafflestudio.snutt.lectures.data.Lecture
import com.wafflestudio.snutt.lectures.utils.ClassTimeUtils

data class LectureDto(
@JsonProperty("_id")
Expand Down Expand Up @@ -33,9 +32,6 @@ data class LectureDto(
val wasFull: Boolean,
val snuttEvLecture: SnuttEvLectureSummaryDto? = null,
val categoryPre2025: String?,
// FIXME: 안드로이드 구버전 대응용 필드 1년 후 2024년에 삭제 (2023/06/26)
@JsonProperty("class_time_mask")
val classTimeMask: List<Int> = emptyList(),
)

fun LectureDto(
Expand Down Expand Up @@ -63,5 +59,4 @@ fun LectureDto(
wasFull = lecture.wasFull,
snuttEvLecture = snuttevLecture,
categoryPre2025 = lecture.categoryPre2025,
classTimeMask = ClassTimeUtils.classTimeToBitmask(lecture.classPlaceAndTimes),
)
21 changes: 1 addition & 20 deletions core/src/main/kotlin/lectures/service/LectureService.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,10 @@ import com.wafflestudio.snutt.common.enum.Semester
import com.wafflestudio.snutt.common.exception.EvDataNotFoundException
import com.wafflestudio.snutt.evaluation.dto.SnuttEvLectureSummaryDto
import com.wafflestudio.snutt.evaluation.repository.SnuttEvRepository
import com.wafflestudio.snutt.lecturebuildings.service.LectureBuildingService
import com.wafflestudio.snutt.lectures.data.Lecture
import com.wafflestudio.snutt.lectures.dto.LectureDto
import com.wafflestudio.snutt.lectures.dto.SearchDto
import com.wafflestudio.snutt.lectures.dto.placeInfos
import com.wafflestudio.snutt.lectures.repository.LectureRepository
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import org.springframework.stereotype.Service
Expand Down Expand Up @@ -40,7 +37,6 @@ interface LectureService {
class LectureServiceImpl(
private val lectureRepository: LectureRepository,
private val snuttEvRepository: SnuttEvRepository,
private val lectureBuildingService: LectureBuildingService,
) : LectureService {
override fun findAll(): Flow<Lecture> = lectureRepository.findAll()

Expand All @@ -63,25 +59,10 @@ class LectureServiceImpl(
return lectures.map { lecture ->
val snuttEvLecture = snuttIdToEvLectureMap[lecture.id]
LectureDto(lecture, snuttEvLecture)
}.addLectureBuildings()
}
}

override suspend fun getEvSummary(lectureId: String): SnuttEvLectureSummaryDto {
return snuttEvRepository.getSummariesByIds(listOf(lectureId)).firstOrNull() ?: throw EvDataNotFoundException
}

private suspend fun List<LectureDto>.addLectureBuildings(): List<LectureDto> =
coroutineScope {
val placeInfosAll =
flatMap { it.classPlaceAndTimes.flatMap { classPlaceAndTime -> classPlaceAndTime.placeInfos } }.distinct()
val buildings = lectureBuildingService.getLectureBuildings(placeInfosAll).associateBy { it.buildingNumber }
forEach {
it.classPlaceAndTimes.forEach { classPlaceAndTime ->
classPlaceAndTime.apply {
lectureBuildings = placeInfos.mapNotNull { placeInfo -> buildings[placeInfo.buildingNumber] }
}
}
}
this@addLectureBuildings
}
}
15 changes: 0 additions & 15 deletions core/src/main/kotlin/lectures/utils/ClassTimeUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,6 @@ import kotlin.math.ceil
import kotlin.math.floor

object ClassTimeUtils {
// FIXME: 안드로이드 구버전 대응용 1년 후 2024년에 삭제 (2023/06/26)
fun classTimeToBitmask(classPlaceAndTimes: List<ClassPlaceAndTime>): List<Int> {
val bitTable = Array(7) { Array(30) { 0 } }

classPlaceAndTimes.filter { it.startMinute >= 480 && it.endMinute <= 1380 }.map { classTime ->
val dayValue = classTime.day.value
val startPeriod = classTime.startPeriod
val endPeriod = classTime.endPeriod
for (i: Int in (startPeriod * 2).toInt() until (endPeriod * 2).toInt())
bitTable[dayValue][i] = 1
}

return bitTable.map { day -> day.reduce { res, i -> res.shl(1) + i } }
}

fun timesOverlap(times: List<ClassPlaceAndTime>) =
times.indices.any { i ->
times.subList(i + 1, times.size).any { comparedTime ->
Expand Down
Loading

0 comments on commit 5376fc1

Please sign in to comment.