@@ -6,7 +6,10 @@ import com.wafflestudio.snu4t.common.util.buildMultiValueMap
66import com.wafflestudio.snu4t.config.SnuttEvWebClient
77import com.wafflestudio.snu4t.coursebook.service.CoursebookService
88import com.wafflestudio.snu4t.evaluation.dto.EvLectureInfoDto
9+ import com.wafflestudio.snu4t.evaluation.dto.EvUserDto
910import com.wafflestudio.snu4t.timetables.service.TimetableService
11+ import com.wafflestudio.snu4t.users.dto.UserDto
12+ import com.wafflestudio.snu4t.users.service.UserService
1013import kotlinx.coroutines.Dispatchers
1114import kotlinx.coroutines.flow.toList
1215import kotlinx.coroutines.withContext
@@ -25,26 +28,29 @@ class EvService(
2528 private val snuttEvWebClient : SnuttEvWebClient ,
2629 private val timetableService : TimetableService ,
2730 private val coursebookService : CoursebookService ,
31+ private val userService : UserService
2832) {
2933 suspend fun handleRouting (
3034 userId : String ,
3135 requestPath : String ,
3236 requestQueryParams : MultiValueMap <String , String > = buildMultiValueMap(mapOf()),
3337 originalBody : String ,
3438 method : HttpMethod ,
35- ): Map <String , Any > =
36- snuttEvWebClient.method(method)
39+ ): Map <String , Any ?> {
40+ val result : MutableMap < String , Any ?> = snuttEvWebClient.method(method)
3741 .uri { builder -> builder.path(requestPath).queryParams(requestQueryParams).build() }
3842 .header(" Snutt-User-Id" , userId)
3943 .header(HttpHeaders .CONTENT_TYPE , MediaType .APPLICATION_JSON_VALUE )
4044 .body(BodyInserters .fromValue(originalBody))
4145 .retrieve()
42- .awaitBody()
46+ .awaitBody<MutableMap <String , Any ?>>()
47+ return updateUserInfo(result)
48+ }
4349
4450 suspend fun getMyLatestLectures (
4551 userId : String ,
4652 requestQueryParams : MultiValueMap <String , String >? = null,
47- ): Map <String , Any > {
53+ ): Map <String , Any ? > {
4854 val recentLectures: List <EvLectureInfoDto > =
4955 coursebookService.getLastTwoCourseBooksBeforeCurrent().flatMap { coursebook ->
5056 timetableService.getTimetablesBySemester(userId, coursebook.year, coursebook.semester)
@@ -83,4 +89,22 @@ class EvService(
8389 .retrieve()
8490 .awaitBody()
8591 }
92+
93+ private suspend fun updateUserInfo (data : MutableMap <String , Any ?>): MutableMap <String , Any ?> {
94+ val updatedMap: MutableMap <String , Any ?> = mutableMapOf ()
95+ for ((k, v) in data.entries) {
96+ if (k == " user_id" ) {
97+ val userDto = runCatching {EvUserDto (userService.getUser(v as String ))}.getOrNull()
98+ updatedMap[" user" ] = userDto
99+ }
100+ else {
101+ when (v) {
102+ is List <* > -> updatedMap[k] = v.map { updateUserInfo(it as MutableMap <String , Any ?>) }
103+ is MutableMap <* , * > -> updatedMap[k] = updateUserInfo(v as MutableMap <String , Any ?>)
104+ else -> updatedMap[k] = v
105+ }
106+ }
107+ }
108+ return updatedMap
109+ }
86110}
0 commit comments