Skip to content

Commit 8b51918

Browse files
authored
Merge pull request #53 from prgrms-web-devcourse-final-project/QUZ-109-FIX-Socket-Message
[QUZ-109][BUGFIX] fix socket message
2 parents 64fa95e + 0425795 commit 8b51918

File tree

5 files changed

+43
-18
lines changed

5 files changed

+43
-18
lines changed

game-service/game-application/app-api/src/main/kotlin/com/grepp/quizy/game/api/game/dto/GameResponse.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,24 @@
11
package com.grepp.quizy.game.api.game.dto
22

33
import com.grepp.quizy.game.domain.game.Game
4+
import com.grepp.quizy.game.domain.game.Player
45

56
data class GameResponse(
67
val id: Long,
8+
val subject: String,
9+
val level: String,
10+
val quizCount: Int,
11+
val players: List<Player>,
712
val inviteCode: String?,
813
) {
914
companion object {
1015
fun from(game: Game): GameResponse {
1116
return GameResponse(
1217
id = game.id,
18+
subject = game.setting.subject.description,
19+
level = game.setting.level.description,
20+
quizCount = game.setting.quizCount,
21+
players = game.players.players,
1322
inviteCode = game.inviteCode?.value,
1423
)
1524
}

game-service/game-domain/src/main/kotlin/com/grepp/quizy/game/domain/game/GameVO.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ data class Players(
164164
if (players.size >= 5) {
165165
throw GameException.GameAlreadyFullException
166166
}
167-
if (players.contains(player)) {
167+
if (players.any { it.user.id == player.user.id }) {
168168
throw GameException.GameAlreadyParticipatedException
169169
}
170170
return Players(players + player)

game-service/game-infra/src/main/kotlin/com/grepp/quizy/game/infra/game/entity/GameRedisEntity.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ class GameRedisEntity(
2323

2424
val players: Players,
2525

26-
val inviteCode: InviteCode?
26+
val inviteCode: String?
2727
) {
2828
companion object {
2929
fun from(game: Game): GameRedisEntity {
@@ -33,7 +33,7 @@ class GameRedisEntity(
3333
setting = game.setting,
3434
status = game.status,
3535
players = game.players,
36-
inviteCode = game.inviteCode
36+
inviteCode = game.inviteCode?.value
3737
)
3838
}
3939

@@ -46,7 +46,7 @@ class GameRedisEntity(
4646
_setting = setting,
4747
_status = status,
4848
_players = players,
49-
inviteCode = inviteCode
49+
inviteCode = inviteCode?.let { InviteCode(it) }
5050
)
5151
}
5252

game-service/game-infra/src/main/kotlin/com/grepp/quizy/game/infra/game/repository/GameRepositoryAdapter.kt

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@ package com.grepp.quizy.game.infra.game.repository
33
import com.grepp.quizy.game.domain.game.Game
44
import com.grepp.quizy.game.domain.game.GameRepository
55
import com.grepp.quizy.game.infra.game.entity.GameRedisEntity
6+
import org.springframework.data.redis.core.RedisTemplate
7+
import org.springframework.data.redis.core.ScanOptions
68
import org.springframework.data.repository.findByIdOrNull
79
import org.springframework.stereotype.Repository
810

911
@Repository
1012
class GameRepositoryAdapter(
1113
private val gameRedisRepository: GameRedisRepository,
14+
private val redisTemplate: RedisTemplate<String,String>
1215
) : GameRepository {
1316

1417
override fun save(game: Game): Game {
@@ -22,9 +25,26 @@ class GameRepositoryAdapter(
2225
}
2326

2427
override fun findByInviteCode(code: String): Game? {
25-
return gameRedisRepository
26-
.findTopByInviteCode(code)
27-
?.toDomain()
28+
val scanner = redisTemplate.connectionFactory
29+
.connection
30+
.scan(
31+
ScanOptions.scanOptions()
32+
.match("game:*")
33+
.count(100)
34+
.build())
35+
36+
while(scanner.hasNext()) {
37+
val key = String(scanner.next())
38+
val inviteCode = redisTemplate.opsForHash<String, String>()
39+
.get(key, "inviteCode")
40+
41+
if(inviteCode == code) {
42+
return gameRedisRepository.findByIdOrNull(key.split(":")[1].toLong())
43+
?.toDomain()
44+
}
45+
}
46+
return null
47+
2848
}
2949

3050
}
Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.grepp.quizy.game.infra.redis
22

33
import com.fasterxml.jackson.databind.ObjectMapper
4-
import com.grepp.quizy.game.domain.GameMessage
54
import com.grepp.quizy.game.infra.websocket.WebSocketDestination.MULTIPLE_PREFIX
65
import org.springframework.data.redis.connection.Message
76
import org.springframework.data.redis.connection.MessageListener
@@ -10,20 +9,17 @@ import org.springframework.stereotype.Component
109

1110
@Component
1211
class RedisSubscriber(
13-
private val objectMapper: ObjectMapper,
14-
private val messagingTemplate: SimpMessagingTemplate,
12+
private val objectMapper: ObjectMapper,
13+
private val messagingTemplate: SimpMessagingTemplate,
1514
) : MessageListener {
1615

1716
override fun onMessage(message: Message, pattern: ByteArray?) {
18-
val publishMessage = String(message.body)
19-
val gameMessage =
20-
objectMapper.readValue(
21-
publishMessage,
22-
GameMessage::class.java,
23-
)
17+
val publishMessage = message.toString()
18+
val gameId = objectMapper.readTree(publishMessage).get("gameId").asText()
19+
2420
messagingTemplate.convertAndSend(
25-
"$MULTIPLE_PREFIX/game/${gameMessage.gameId}",
26-
publishMessage,
21+
"$MULTIPLE_PREFIX/game/${gameId}",
22+
publishMessage,
2723
)
2824
}
2925
}

0 commit comments

Comments
 (0)