Skip to content

Commit c66ef0b

Browse files
authored
MERGE :: #12 attach latest message from ai on GET /room/list
2 parents 4b21635 + 1cf9145 commit c66ef0b

File tree

3 files changed

+43
-10
lines changed

3 files changed

+43
-10
lines changed

src/main/kotlin/com/teamapi/palette/dto/room/RoomResponse.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@ package com.teamapi.palette.dto.room
22

33
data class RoomResponse(
44
val id: Long,
5-
val title: String?
5+
val title: String?,
6+
val message: String?
67
)
Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,47 @@
11
package com.teamapi.palette.repository
22

3+
import com.teamapi.palette.dto.room.RoomResponse
34
import com.teamapi.palette.entity.Room
4-
import kotlinx.coroutines.flow.Flow
5+
import org.jooq.DSLContext
6+
import org.jooq.impl.DSL
57
import org.springframework.data.repository.kotlin.CoroutineCrudRepository
68
import org.springframework.stereotype.Repository
9+
import com.teamapi.palette.entity.tables.TblChat.TBL_CHAT as CHAT
10+
import com.teamapi.palette.entity.tables.TblChat.TblChatPath.TBL_CHAT as CHAT_PATH
11+
import com.teamapi.palette.entity.tables.TblRoom.TBL_ROOM as ROOM
12+
import com.teamapi.palette.entity.tables.TblRoom.TblRoomPath.TBL_ROOM as ROOM_PATH
713

814
@Repository
9-
interface RoomRepository : CoroutineCrudRepository<Room, Long> {
10-
suspend fun findByUserId(userId: Long): Flow<Room>
15+
interface RoomRepository : CoroutineCrudRepository<Room, Long>, RoomQueryRepository
16+
17+
interface RoomQueryRepository {
18+
suspend fun findRoomByUserId(userId: Long): List<RoomResponse>
19+
}
20+
21+
@Repository
22+
class RoomQueryRepositoryImpl(
23+
private val ctx: DSLContext
24+
) : RoomQueryRepository {
25+
override suspend fun findRoomByUserId(userId: Long): List<RoomResponse> {
26+
val dsl = ctx.dsl()
27+
return dsl
28+
.select(
29+
ROOM_PATH,
30+
DSL.field(
31+
dsl
32+
.select(CHAT_PATH)
33+
.from(CHAT)
34+
.where(
35+
CHAT.ROOM_ID.eq(ROOM.ID)
36+
.and(CHAT.IS_AI.eq(true))
37+
.and(CHAT.RESOURCE.eq("CHAT"))
38+
)
39+
.orderBy(CHAT.ID.desc())
40+
.limit(1)
41+
)
42+
)
43+
.from(ROOM)
44+
.where(ROOM_PATH.USER_ID.eq(userId))
45+
.awaitAll { RoomResponse(it.value1().id, it.value1().title, it.value2().message) }
46+
}
1147
}

src/main/kotlin/com/teamapi/palette/service/RoomService.kt

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ import com.teamapi.palette.entity.Room
66
import com.teamapi.palette.repository.RoomRepository
77
import com.teamapi.palette.response.ErrorCode
88
import com.teamapi.palette.response.exception.CustomException
9-
import kotlinx.coroutines.flow.map
10-
import kotlinx.coroutines.flow.toList
119
import org.springframework.stereotype.Service
1210

1311
@Service
@@ -17,13 +15,11 @@ class RoomService(
1715
) {
1816
suspend fun createRoom(): RoomResponse {
1917
val room = roomRepository.save(Room(userId = sessionHolder.me()))
20-
return RoomResponse(room.id!!, room.title ?: "")
18+
return RoomResponse(room.id!!, room.title, null)
2119
}
2220

2321
suspend fun getRoomList(): List<RoomResponse> {
24-
return roomRepository.findByUserId(sessionHolder.me())
25-
.map { RoomResponse(it.id!!, it.title ?: "") }
26-
.toList()
22+
return roomRepository.findRoomByUserId(sessionHolder.me())
2723
}
2824

2925
suspend fun updateRoomTitle(updateRoomTitleRequest: UpdateRoomTitleRequest) {

0 commit comments

Comments
 (0)