From 75f23239f547ffcc09b04a127b89f091684150db Mon Sep 17 00:00:00 2001 From: sunwoong <sunwoong1122@gmail.com> Date: Mon, 21 Oct 2024 14:22:35 +0900 Subject: [PATCH 1/5] =?UTF-8?q?DRAW-404=20refactor:=20=EB=A7=88=ED=94=BC?= =?UTF-8?q?=EC=95=84=20=EA=B2=8C=EC=9E=84=20=EA=B2=B0=EA=B3=BC=20=EC=A0=95?= =?UTF-8?q?=EA=B7=9C=ED=99=94=20=EC=9E=91=EC=97=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/xorker/draw/mafia/DrawData.kt | 7 +++ .../draw/mafia/MafiaGameResultJpaEntity.kt | 36 ++++++++++- .../com/xorker/draw/player/PlayerJpaEntity.kt | 61 +++++++++++++++++++ .../xorker/draw/player/PlayerJpaRepository.kt | 5 ++ ..._normalization_mafia_game_result_table.sql | 22 +++++++ .../com/xorker/draw/player/ResultType.kt | 9 +++ .../kotlin/com/xorker/draw/player/RoleType.kt | 7 +++ 7 files changed, 145 insertions(+), 2 deletions(-) create mode 100644 adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/DrawData.kt create mode 100644 adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt create mode 100644 adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt create mode 100644 adapter/rdb/src/main/resources/db/migration/V6__normalization_mafia_game_result_table.sql create mode 100644 domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt create mode 100644 domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/DrawData.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/DrawData.kt new file mode 100644 index 00000000..efba3fc2 --- /dev/null +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/DrawData.kt @@ -0,0 +1,7 @@ +package com.xorker.draw.mafia + +import com.xorker.draw.user.UserId + +data class DrawData( + val draw: MutableList<Pair<UserId, Map<String, Any>>>, +) diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt index 6564d297..8656f181 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt @@ -1,12 +1,17 @@ package com.xorker.draw.mafia import com.xorker.draw.BaseJpaEntity +import com.xorker.draw.player.PlayerJpaEntity import jakarta.persistence.Column import jakarta.persistence.Entity +import jakarta.persistence.FetchType import jakarta.persistence.GeneratedValue import jakarta.persistence.GenerationType import jakarta.persistence.Id +import jakarta.persistence.OneToMany import jakarta.persistence.Table +import org.hibernate.annotations.Cascade +import org.hibernate.annotations.CascadeType @Entity @Table(name = "mafia_game_result") @@ -20,13 +25,40 @@ internal class MafiaGameResultJpaEntity : BaseJpaEntity() { lateinit var gameResult: String protected set + @Column(name = "language", columnDefinition = "varchar(20)") + lateinit var language: String + protected set + + @Column(name = "draw", columnDefinition = "TEXT") + lateinit var draw: String + protected set + + @Column(name = "mafia_answer", columnDefinition = "varchar(50)") + var mafiaAnswer: String? = null + protected set + @Column(name = "word_id", columnDefinition = "bigint") var wordId: Long = 0 + protected set + + @OneToMany(mappedBy = "mafiaGameResult", fetch = FetchType.LAZY) + @Cascade(CascadeType.PERSIST) + val players: MutableList<PlayerJpaEntity> = mutableListOf() + + fun removePlayer(player: PlayerJpaEntity) { + players.remove(player) + } + + fun addPlayer(player: PlayerJpaEntity) { + players.add(player) + } companion object { - internal fun of(gameResult: String, wordId: Long): MafiaGameResultJpaEntity { + internal fun of(locale: String, draw: String, mafiaAnswer: String?, wordId: Long): MafiaGameResultJpaEntity { return MafiaGameResultJpaEntity().apply { - this.gameResult = gameResult + this.language = locale + this.draw = draw + this.mafiaAnswer = mafiaAnswer this.wordId = wordId } } diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt new file mode 100644 index 00000000..1d46795f --- /dev/null +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt @@ -0,0 +1,61 @@ +package com.xorker.draw.player + +import com.xorker.draw.BaseJpaEntity +import com.xorker.draw.mafia.MafiaGameResultJpaEntity +import com.xorker.draw.user.UserJpaEntity +import jakarta.persistence.Column +import jakarta.persistence.Entity +import jakarta.persistence.EnumType +import jakarta.persistence.Enumerated +import jakarta.persistence.FetchType +import jakarta.persistence.GeneratedValue +import jakarta.persistence.GenerationType +import jakarta.persistence.Id +import jakarta.persistence.JoinColumn +import jakarta.persistence.ManyToOne +import jakarta.persistence.Table + +@Entity +@Table(name = "player") +internal class PlayerJpaEntity : BaseJpaEntity() { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "player_id", nullable = false) + var id: Long = 0 + protected set + + @Enumerated(EnumType.STRING) + @Column(name = "result", columnDefinition = "varchar(20)") + lateinit var result: ResultType + protected set + + @Enumerated(EnumType.STRING) + @Column(name = "role", columnDefinition = "varchar(20)") + lateinit var role: RoleType + protected set + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id") + lateinit var user: UserJpaEntity + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "mafia_game_result_id") + lateinit var mafiaGameResult: MafiaGameResultJpaEntity + + fun addMafiaGameResult(gameResult: MafiaGameResultJpaEntity) { + mafiaGameResult = gameResult + gameResult.addPlayer(this) + } + + companion object { + fun of(result: ResultType, role: RoleType, user: UserJpaEntity, gameResult: MafiaGameResultJpaEntity): PlayerJpaEntity { + val player = PlayerJpaEntity().apply { + this.result = result + this.role = role + this.user = user + } + player.addMafiaGameResult(gameResult) + return player + } + } +} diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt new file mode 100644 index 00000000..e5004d8c --- /dev/null +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt @@ -0,0 +1,5 @@ +package com.xorker.draw.player + +import org.springframework.data.jpa.repository.JpaRepository + +internal interface PlayerJpaRepository : JpaRepository<PlayerJpaEntity, Long> diff --git a/adapter/rdb/src/main/resources/db/migration/V6__normalization_mafia_game_result_table.sql b/adapter/rdb/src/main/resources/db/migration/V6__normalization_mafia_game_result_table.sql new file mode 100644 index 00000000..41dca4da --- /dev/null +++ b/adapter/rdb/src/main/resources/db/migration/V6__normalization_mafia_game_result_table.sql @@ -0,0 +1,22 @@ +alter table mafia_game_result + modify column game_result text NULL; +alter table mafia_game_result + add column language varchar(20) NOT NULL; +alter table mafia_game_result + add column draw text NOT NULL; +alter table mafia_game_result + add column mafia_answer varchar(50) NULL; + +create table player +( + player_id bigint NOT NULL AUTO_INCREMENT COMMENT 'PK', + result varchar(20) NOT NULL COMMENT '게임 승리 여부', + role varchar(20) NOT NULL COMMENT '플레이어 역할', + created_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + user_id bigint NOT NULL COMMENT 'FK - Users', + mafia_game_result_id bigint NOT NULL COMMENT 'FK - MafiaGameResult', + PRIMARY KEY PK_player (player_id), + KEY IDX_createdat (created_at), + KEY IDX_updatedat (updated_at) +) COMMENT '플레이어 정보'; diff --git a/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt b/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt new file mode 100644 index 00000000..a80dcebd --- /dev/null +++ b/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt @@ -0,0 +1,9 @@ +package com.xorker.draw.player + +enum class ResultType { + MAFIA_WIN, + MAFIA_LOSE, + CITIZEN_WIN, + CITIZEN_LOSE, + ; +} diff --git a/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt b/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt new file mode 100644 index 00000000..2fa877ec --- /dev/null +++ b/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt @@ -0,0 +1,7 @@ +package com.xorker.draw.player + +enum class RoleType { + MAFIA, + CITIZEN, + ; +} From 6c90e5fc476dae6585da872b93ea4a4a5c8c2baa Mon Sep 17 00:00:00 2001 From: sunwoong <sunwoong1122@gmail.com> Date: Mon, 21 Oct 2024 14:22:52 +0900 Subject: [PATCH 2/5] =?UTF-8?q?DRAW-404=20refactor:=20=EB=A7=88=ED=94=BC?= =?UTF-8?q?=EC=95=84=20=EA=B2=8C=EC=9E=84=20=EA=B2=B0=EA=B3=BC=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=B9=84=EC=A6=88=EB=8B=88=EC=8A=A4=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../draw/mafia/MafiaGameResultAdapter.kt | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt index 3a5482d0..d3e4305d 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt @@ -1,29 +1,73 @@ package com.xorker.draw.mafia import com.fasterxml.jackson.databind.ObjectMapper +import com.xorker.draw.exception.NotFoundUserException import com.xorker.draw.exception.NotFoundWordException +import com.xorker.draw.player.PlayerJpaEntity +import com.xorker.draw.player.ResultType +import com.xorker.draw.player.RoleType +import com.xorker.draw.user.UserJpaEntity +import com.xorker.draw.user.UserJpaRepository +import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Component +import org.springframework.transaction.annotation.Transactional @Component internal class MafiaGameResultAdapter( private val objectMapper: ObjectMapper, + private val userJpaRepository: UserJpaRepository, private val mafiaGameResultJpaRepository: MafiaGameResultJpaRepository, private val wordJpaRepository: WordJpaRepository, ) : MafiaGameResultRepository { + @Transactional override fun saveMafiaGameResult(gameInfo: MafiaGameInfo) { + println() + println("save mafia game result") + val room = gameInfo.room + val phase = gameInfo.phase assertIs<MafiaPhase.End>(phase) val keyword = phase.keyword - val findEntity = wordJpaRepository.findByKeyword(keyword.answer) ?: throw NotFoundWordException + val word = wordJpaRepository.findByKeyword(keyword.answer) ?: throw NotFoundWordException + + val drawData = DrawData(phase.drawData) + val draw = objectMapper.writeValueAsString(drawData) - val mafiaGameResult = gameInfo.toMafiaGameResult() + val gameResult = MafiaGameResultJpaEntity.of(room.locale, draw, phase.answer, word.id) - val serializedMafiaGameResult = objectMapper.writeValueAsString(mafiaGameResult) + val mafia = phase.mafiaPlayer + room.players.forEach { player -> + println(player.toString()) + val user = userJpaRepository.findByIdOrNull(player.userId.value) ?: throw NotFoundUserException + println(user.id) + val createPlayer = createPlayer(phase, mafia, player, user, gameResult) + println(createPlayer.toString()) + } + println() + println("save save") - val entity = MafiaGameResultJpaEntity.of(serializedMafiaGameResult, findEntity.id) + mafiaGameResultJpaRepository.save(gameResult) + } - mafiaGameResultJpaRepository.save(entity) + private fun createPlayer( + phase: MafiaPhase.End, + mafia: MafiaPlayer, + player: MafiaPlayer, + user: UserJpaEntity, + gameResult: MafiaGameResultJpaEntity, + ) = if (phase.isMafiaWin) { + if (mafia.userId == player.userId) { + PlayerJpaEntity.of(ResultType.MAFIA_WIN, RoleType.MAFIA, user, gameResult) + } else { + PlayerJpaEntity.of(ResultType.CITIZEN_LOSE, RoleType.CITIZEN, user, gameResult) + } + } else { + if (mafia.userId == player.userId) { + PlayerJpaEntity.of(ResultType.MAFIA_LOSE, RoleType.MAFIA, user, gameResult) + } else { + PlayerJpaEntity.of(ResultType.CITIZEN_WIN, RoleType.CITIZEN, user, gameResult) + } } } From 3e0a91fd5809a655edf4266aa6d047daabce5bdd Mon Sep 17 00:00:00 2001 From: sunwoong <sunwoong1122@gmail.com> Date: Mon, 21 Oct 2024 14:23:44 +0900 Subject: [PATCH 3/5] =?UTF-8?q?DRAW-404=20chore:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xorker/draw/mafia/MafiaGameResultAdapter.kt | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt index d3e4305d..6ec71a27 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt @@ -22,8 +22,6 @@ internal class MafiaGameResultAdapter( @Transactional override fun saveMafiaGameResult(gameInfo: MafiaGameInfo) { - println() - println("save mafia game result") val room = gameInfo.room val phase = gameInfo.phase @@ -39,14 +37,10 @@ internal class MafiaGameResultAdapter( val mafia = phase.mafiaPlayer room.players.forEach { player -> - println(player.toString()) val user = userJpaRepository.findByIdOrNull(player.userId.value) ?: throw NotFoundUserException - println(user.id) - val createPlayer = createPlayer(phase, mafia, player, user, gameResult) - println(createPlayer.toString()) + + createPlayer(phase, mafia, player, user, gameResult) } - println() - println("save save") mafiaGameResultJpaRepository.save(gameResult) } From 2798a5c9ea4e4ff8e1584738f7f58d8396b2b0d7 Mon Sep 17 00:00:00 2001 From: sunwoong <sunwoong1122@gmail.com> Date: Sun, 3 Nov 2024 22:42:02 +0900 Subject: [PATCH 4/5] =?UTF-8?q?DRAW-404=20refactor:=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xorker/draw/mafia/MafiaGameResultAdapter.kt | 12 ++++++------ .../xorker/draw/mafia/MafiaGameResultJpaEntity.kt | 15 ++++++++++----- ...ayerJpaEntity.kt => PlayerHistoryJpaEntity.kt} | 8 ++++---- ...epository.kt => PlayerHistoryJpaRepository.kt} | 2 +- .../kotlin/com/xorker/draw/player/ResultType.kt | 12 +++++++----- .../kotlin/com/xorker/draw/player/RoleType.kt | 8 +++++--- 6 files changed, 33 insertions(+), 24 deletions(-) rename adapter/rdb/src/main/kotlin/com/xorker/draw/player/{PlayerJpaEntity.kt => PlayerHistoryJpaEntity.kt} (88%) rename adapter/rdb/src/main/kotlin/com/xorker/draw/player/{PlayerJpaRepository.kt => PlayerHistoryJpaRepository.kt} (50%) diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt index 6ec71a27..b9414aec 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultAdapter.kt @@ -3,7 +3,7 @@ package com.xorker.draw.mafia import com.fasterxml.jackson.databind.ObjectMapper import com.xorker.draw.exception.NotFoundUserException import com.xorker.draw.exception.NotFoundWordException -import com.xorker.draw.player.PlayerJpaEntity +import com.xorker.draw.player.PlayerHistoryJpaEntity import com.xorker.draw.player.ResultType import com.xorker.draw.player.RoleType import com.xorker.draw.user.UserJpaEntity @@ -33,7 +33,7 @@ internal class MafiaGameResultAdapter( val drawData = DrawData(phase.drawData) val draw = objectMapper.writeValueAsString(drawData) - val gameResult = MafiaGameResultJpaEntity.of(room.locale, draw, phase.answer, word.id) + val gameResult = MafiaGameResultJpaEntity.of(room.locale, draw, phase.answer, room.isRandomMatching, word.id) val mafia = phase.mafiaPlayer room.players.forEach { player -> @@ -53,15 +53,15 @@ internal class MafiaGameResultAdapter( gameResult: MafiaGameResultJpaEntity, ) = if (phase.isMafiaWin) { if (mafia.userId == player.userId) { - PlayerJpaEntity.of(ResultType.MAFIA_WIN, RoleType.MAFIA, user, gameResult) + PlayerHistoryJpaEntity.of(ResultType.MAFIA_WIN, RoleType.MAFIA, user, gameResult) } else { - PlayerJpaEntity.of(ResultType.CITIZEN_LOSE, RoleType.CITIZEN, user, gameResult) + PlayerHistoryJpaEntity.of(ResultType.CITIZEN_LOSE, RoleType.CITIZEN, user, gameResult) } } else { if (mafia.userId == player.userId) { - PlayerJpaEntity.of(ResultType.MAFIA_LOSE, RoleType.MAFIA, user, gameResult) + PlayerHistoryJpaEntity.of(ResultType.MAFIA_LOSE, RoleType.MAFIA, user, gameResult) } else { - PlayerJpaEntity.of(ResultType.CITIZEN_WIN, RoleType.CITIZEN, user, gameResult) + PlayerHistoryJpaEntity.of(ResultType.CITIZEN_WIN, RoleType.CITIZEN, user, gameResult) } } } diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt index 8656f181..d24e950f 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/mafia/MafiaGameResultJpaEntity.kt @@ -1,7 +1,7 @@ package com.xorker.draw.mafia import com.xorker.draw.BaseJpaEntity -import com.xorker.draw.player.PlayerJpaEntity +import com.xorker.draw.player.PlayerHistoryJpaEntity import jakarta.persistence.Column import jakarta.persistence.Entity import jakarta.persistence.FetchType @@ -37,28 +37,33 @@ internal class MafiaGameResultJpaEntity : BaseJpaEntity() { var mafiaAnswer: String? = null protected set + @Column(name = "is_random_matching", columnDefinition = "boolean") + var isRandomMatching: Boolean = false + protected set + @Column(name = "word_id", columnDefinition = "bigint") var wordId: Long = 0 protected set @OneToMany(mappedBy = "mafiaGameResult", fetch = FetchType.LAZY) @Cascade(CascadeType.PERSIST) - val players: MutableList<PlayerJpaEntity> = mutableListOf() + val players: MutableList<PlayerHistoryJpaEntity> = mutableListOf() - fun removePlayer(player: PlayerJpaEntity) { + fun removePlayer(player: PlayerHistoryJpaEntity) { players.remove(player) } - fun addPlayer(player: PlayerJpaEntity) { + fun addPlayer(player: PlayerHistoryJpaEntity) { players.add(player) } companion object { - internal fun of(locale: String, draw: String, mafiaAnswer: String?, wordId: Long): MafiaGameResultJpaEntity { + internal fun of(locale: String, draw: String, mafiaAnswer: String?, isRandomMatching: Boolean, wordId: Long): MafiaGameResultJpaEntity { return MafiaGameResultJpaEntity().apply { this.language = locale this.draw = draw this.mafiaAnswer = mafiaAnswer + this.isRandomMatching = isRandomMatching this.wordId = wordId } } diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerHistoryJpaEntity.kt similarity index 88% rename from adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt rename to adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerHistoryJpaEntity.kt index 1d46795f..871f80bb 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaEntity.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerHistoryJpaEntity.kt @@ -16,8 +16,8 @@ import jakarta.persistence.ManyToOne import jakarta.persistence.Table @Entity -@Table(name = "player") -internal class PlayerJpaEntity : BaseJpaEntity() { +@Table(name = "player_history") +internal class PlayerHistoryJpaEntity : BaseJpaEntity() { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "player_id", nullable = false) @@ -48,8 +48,8 @@ internal class PlayerJpaEntity : BaseJpaEntity() { } companion object { - fun of(result: ResultType, role: RoleType, user: UserJpaEntity, gameResult: MafiaGameResultJpaEntity): PlayerJpaEntity { - val player = PlayerJpaEntity().apply { + fun of(result: ResultType, role: RoleType, user: UserJpaEntity, gameResult: MafiaGameResultJpaEntity): PlayerHistoryJpaEntity { + val player = PlayerHistoryJpaEntity().apply { this.result = result this.role = role this.user = user diff --git a/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerHistoryJpaRepository.kt similarity index 50% rename from adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt rename to adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerHistoryJpaRepository.kt index e5004d8c..80eab0ff 100644 --- a/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerJpaRepository.kt +++ b/adapter/rdb/src/main/kotlin/com/xorker/draw/player/PlayerHistoryJpaRepository.kt @@ -2,4 +2,4 @@ package com.xorker.draw.player import org.springframework.data.jpa.repository.JpaRepository -internal interface PlayerJpaRepository : JpaRepository<PlayerJpaEntity, Long> +internal interface PlayerHistoryJpaRepository : JpaRepository<PlayerHistoryJpaEntity, Long> diff --git a/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt b/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt index a80dcebd..8de29a81 100644 --- a/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt +++ b/domain/src/main/kotlin/com/xorker/draw/player/ResultType.kt @@ -1,9 +1,11 @@ package com.xorker.draw.player -enum class ResultType { - MAFIA_WIN, - MAFIA_LOSE, - CITIZEN_WIN, - CITIZEN_LOSE, +enum class ResultType( + val description: String, +) { + MAFIA_WIN("마피아 승리"), + MAFIA_LOSE("마피아 패배"), + CITIZEN_WIN("시민 승리"), + CITIZEN_LOSE("시민 패배"), ; } diff --git a/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt b/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt index 2fa877ec..915dee52 100644 --- a/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt +++ b/domain/src/main/kotlin/com/xorker/draw/player/RoleType.kt @@ -1,7 +1,9 @@ package com.xorker.draw.player -enum class RoleType { - MAFIA, - CITIZEN, +enum class RoleType( + val description: String, +) { + MAFIA("마피아"), + CITIZEN("시민"), ; } From 42825460d4629b68d0fa63f7eb9e3c8cf8558383 Mon Sep 17 00:00:00 2001 From: sunwoong <sunwoong1122@gmail.com> Date: Sun, 3 Nov 2024 22:42:50 +0900 Subject: [PATCH 5/5] =?UTF-8?q?DRAW-404=20refactor:=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=20=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../db/migration/V7__update_player_table.sql | 11 +++++++++++ .../db/migration/V8__update_player_history_table.sql | 5 +++++ 2 files changed, 16 insertions(+) create mode 100644 adapter/rdb/src/main/resources/db/migration/V7__update_player_table.sql create mode 100644 adapter/rdb/src/main/resources/db/migration/V8__update_player_history_table.sql diff --git a/adapter/rdb/src/main/resources/db/migration/V7__update_player_table.sql b/adapter/rdb/src/main/resources/db/migration/V7__update_player_table.sql new file mode 100644 index 00000000..87361fb4 --- /dev/null +++ b/adapter/rdb/src/main/resources/db/migration/V7__update_player_table.sql @@ -0,0 +1,11 @@ +rename table player TO player_history; + +alter table mafia_game_result + modify column language varchar(20) NOT NULL COMMENT '게임 방 언어'; +alter table mafia_game_result + modify column draw text NOT NULL COMMENT '그림 데이터'; +alter table mafia_game_result + modify column mafia_answer varchar(50) NULL COMMENT '마피아 입력 단어'; + +alter table player_history + add column is_random_matching boolean NULL COMMENT '마피아 입력 단어'; diff --git a/adapter/rdb/src/main/resources/db/migration/V8__update_player_history_table.sql b/adapter/rdb/src/main/resources/db/migration/V8__update_player_history_table.sql new file mode 100644 index 00000000..d200b0b6 --- /dev/null +++ b/adapter/rdb/src/main/resources/db/migration/V8__update_player_history_table.sql @@ -0,0 +1,5 @@ +alter table player_history + drop column is_random_matching; + +alter table mafia_game_result + add column is_random_matching boolean NULL COMMENT '마피아 입력 단어';