Skip to content

Commit 7d7ebca

Browse files
committed
feat : 랜덤 인카운터 구현, 불필요한 DB IO 성능 개선(인메모리 캐시)
1 parent 5b19b26 commit 7d7ebca

File tree

81 files changed

+1254
-137
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

81 files changed

+1254
-137
lines changed

build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ dependencies {
9090
implementation 'com.fasterxml.jackson.core:jackson-databind'
9191
implementation 'org.springframework.boot:spring-boot-configuration-processor'
9292

93+
// 스프링 캐시
94+
implementation 'org.springframework.boot:spring-boot-starter-cache'
95+
implementation 'com.github.ben-manes.caffeine:caffeine:3.1.8'
9396

9497
// QueryDSL
9598
implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'

src/main/java/org/ezcode/codetest/CodetestApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import org.springframework.boot.SpringApplication;
44
import org.springframework.boot.autoconfigure.SpringBootApplication;
5+
import org.springframework.cache.annotation.EnableCaching;
56
import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
67
import org.springframework.scheduling.annotation.EnableScheduling;
78

89
@SpringBootApplication
910
@EnableJpaAuditing
1011
@EnableScheduling
12+
@EnableCaching
1113
public class CodetestApplication {
1214

1315
public static void main(String[] args) {

src/main/java/org/ezcode/codetest/application/game/dto/request/encounter/EncounterChoiceDeleteRequest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import jakarta.validation.constraints.NotBlank;
44

5-
public record EncounterChoiceDeleteRequest(
5+
public record
6+
EncounterChoiceDeleteRequest(
67

78
@NotBlank(message = "삭제할 이름을 입력해주세요.")
89
String name
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.ezcode.codetest.application.game.dto.request.encounter;
2+
3+
import jakarta.validation.constraints.NotNull;
4+
5+
public record EncounterChoiceRequest(
6+
7+
@NotNull(message = "인카운터를 선택지를 선택해주세요.(true, false)")
8+
Boolean playerDecision
9+
10+
) {
11+
}

src/main/java/org/ezcode/codetest/application/game/dto/request/encounter/EncounterChoiceSaveRequest.java

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.ezcode.codetest.domain.game.model.encounter.RandomEncounterEffect;
66

77
import jakarta.validation.constraints.NotBlank;
8+
import jakarta.validation.constraints.NotNull;
89
import jakarta.validation.constraints.Pattern;
910

1011
public record EncounterChoiceSaveRequest(
@@ -15,33 +16,31 @@ public record EncounterChoiceSaveRequest(
1516
@NotBlank(message = "인카운터 선택 이름은 필수값입니다.")
1617
String choiceName,
1718

18-
@NotBlank(message = "인카운터 선택 결과값은 필수값입니다.")
19-
String resultText,
20-
2119
@NotBlank(message = "인카운터 이펙트는 필수값입니다.")
2220
@Pattern(
23-
regexp = "^(RANDOM_BATTLE"
24-
+ "|MERCHANT_GOOD_DEAL|MERCHANT_BAD_DEAL"
21+
regexp = "^(BOSS_BATTLE_BAD"
22+
+ "|GAMBLING_GOOD|GAMBLING_BAD|BOSS_BATTLE_GOOD"
2523
+ "|STAT_INCREASE|STAT_DECREASE"
26-
+ "|AMBUSH_BANDITS_WIN|AMBUSH_BANDITS_LOSE"
24+
+ "|AMBUSH_BANDITS_ESCAPE|AMBUSH_BANDITS_FIGHT"
2725
+ "|WILD_BEASTS_ESCAPE|WILD_BEASTS_ATTACK"
2826
+ "|ANCIENT_RUINS_TREASURE|ANCIENT_RUINS_TRAP"
2927
+ "|TREASURE_CACHE_FOUND|TREASURE_CACHE_EMPTY)$",
3028
flags = Pattern.Flag.CASE_INSENSITIVE,
3129
message = "effect 는 RandomEncounterEffect 의 유효한 값이어야 합니다."
3230
)
33-
String randomEncounterEffect
31+
String randomEncounterEffect,
3432

35-
) {
33+
@NotNull(message = "플레이어의 인카운터 선택지를 골라주세요.(true,false)")
34+
Boolean playerDecision
3635

36+
) {
3737
public EncounterChoice toEncounterChoice(RandomEncounter encounter) {
3838

3939
return EncounterChoice.builder()
4040
.encounter(encounter)
4141
.encounterEffect(RandomEncounterEffect.valueOf(randomEncounterEffect.trim().toUpperCase()))
42-
.resultText(resultText)
4342
.name(choiceName)
43+
.playerDecision(playerDecision)
4444
.build();
4545
}
46-
4746
}

src/main/java/org/ezcode/codetest/application/game/dto/request/encounter/RandomEncounterSaveRequest.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import org.ezcode.codetest.domain.game.model.encounter.EncounterCategory;
55

66
import jakarta.validation.constraints.NotBlank;
7-
import jakarta.validation.constraints.NotNull;
87
import jakarta.validation.constraints.Pattern;
98

109
public record RandomEncounterSaveRequest(
@@ -21,10 +20,7 @@ public record RandomEncounterSaveRequest(
2120
String name,
2221

2322
@NotBlank(message = "설명란은 필수입니다.")
24-
String encounterText,
25-
26-
@NotNull(message = "가중치 입력은 필수입니다.")
27-
Integer weight
23+
String encounterText
2824
) {
2925

3026
public RandomEncounter toRandomEncounter() {
@@ -33,7 +29,6 @@ public RandomEncounter toRandomEncounter() {
3329
.encounterCategory(EncounterCategory.valueOf(encounterCategory.trim().toUpperCase()))
3430
.activated(true)
3531
.name(name)
36-
.weight(weight)
3732
.encounterText(encounterText)
3833
.build();
3934
}

src/main/java/org/ezcode/codetest/application/game/dto/response/encounter/BattleHistoryResponse.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ public record BattleHistoryResponse(
1616
boolean isPlayerWin
1717

1818
) {
19-
2019
public static BattleHistoryResponse of(
2120
String playerNickName,
2221
String enemyNickName,
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package org.ezcode.codetest.application.game.dto.response.encounter;
2+
3+
import java.util.List;
4+
5+
import org.ezcode.codetest.domain.game.model.encounter.EncounterHistory;
6+
7+
public record EncounterResponse(
8+
9+
List<String> log,
10+
11+
boolean isPositive
12+
13+
) {
14+
15+
public static EncounterResponse of(List<String> log, boolean isPositive) {
16+
17+
return new EncounterResponse(log, isPositive);
18+
}
19+
20+
public static EncounterResponse from(EncounterHistory history) {
21+
22+
return new EncounterResponse(history.getResultLog(), history.getIsPositive());
23+
}
24+
25+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package org.ezcode.codetest.application.game.dto.response.encounter;
2+
3+
public record MatchingBattleResponse(
4+
5+
boolean isEnemyStrongThanMe,
6+
7+
String message,
8+
9+
Long enemyId
10+
11+
) {
12+
public static MatchingBattleResponse of(boolean isEnemyStrongThanMe, String message, Long enemyId) {
13+
14+
return new MatchingBattleResponse(isEnemyStrongThanMe, message, enemyId);
15+
}
16+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package org.ezcode.codetest.application.game.dto.response.encounter;
2+
3+
import org.ezcode.codetest.domain.game.model.encounter.EncounterCategory;
4+
import org.ezcode.codetest.domain.game.model.encounter.RandomEncounter;
5+
6+
import lombok.Builder;
7+
8+
@Builder
9+
public record MatchingEncounterResponse(
10+
11+
Long id,
12+
13+
EncounterCategory encounterCategory,
14+
15+
String name,
16+
17+
String encounterText
18+
19+
) {
20+
public static MatchingEncounterResponse from(RandomEncounter encounter) {
21+
22+
return MatchingEncounterResponse.builder()
23+
.encounterCategory(encounter.getEncounterCategory())
24+
.id(encounter.getId())
25+
.name(encounter.getName())
26+
.encounterText(encounter.getEncounterText())
27+
.build();
28+
}
29+
}

0 commit comments

Comments
 (0)