Skip to content

Commit ecbbd60

Browse files
feat : 게임 캐릭터 생성 기능, 아이템 생성 기능, 아이템 뽑기, 스테이터스 확인, 아이템 장착 기능 추가 (#58)
* feat : 게임 도메인 엔티티 생성 및 스킬, 아이템 효과 정의 * feat : 게임 도메인 서비스, 아이템 뽑기 도메인서비스 추가, 랜덤 인카운터 추가 * feat : 아이템 장착, 뽑기, 인벤토리 오픈, 스탯 확인, 캐릭터 생성 기능 추가 # Conflicts: # src/main/java/org/ezcode/codetest/common/security/config/SecurityConfig.java * chore : properties 수정 * chore : properties 수정 * chore : securityconfig 오타수정 * chore : 오타수정 * chore : 오타수정 * chore : 무수히 많은 오타수정, 누락된 어노테이션 추가 * docs : 환경변수 추가 * docs : 오타수정 --------- Co-authored-by: pokerbearkr <[email protected]>
1 parent debafb9 commit ecbbd60

File tree

78 files changed

+2204
-29
lines changed

Some content is hidden

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

78 files changed

+2204
-29
lines changed

.github/workflows/ci.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ jobs:
3333
CLIENT_ID: ${{ secrets.CLIENT_ID }}
3434
CLIENT_SECRET: ${{ secrets.CLIENT_SECRET }}
3535
REDIRECT_URI: ${{ secrets.REDIRECT_URI }}
36+
SPRING_MONGODB_URI: ${{ secrets.SPRING_MONGODB_URI}}
3637

3738
steps:
3839
- name: Checkout Repository

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,13 @@ dependencies {
8888
// AI
8989
implementation 'com.fasterxml.jackson.core:jackson-databind'
9090
implementation 'org.springframework.boot:spring-boot-configuration-processor'
91+
92+
// mongodb
93+
implementation 'org.springframework.boot:spring-boot-starter-data-mongodb'
94+
95+
// map-struct
96+
implementation 'org.mapstruct:mapstruct:1.6.3'
97+
annotationProcessor 'org.mapstruct:mapstruct-processor:1.6.3'
9198
}
9299

93100
tasks.named('test') {

src/main/java/org/ezcode/codetest/application/chatting/dto/request/ChatRoomDeleteRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package org.ezcode.codetest.application.chatting.dto.request;
22

3+
import io.swagger.v3.oas.annotations.media.Schema;
34
import jakarta.validation.constraints.NotNull;
45

6+
@Schema(description = "채팅방 삭제 요청")
57
public record ChatRoomDeleteRequest(
68

9+
@Schema(description = "삭제할 채팅방 ID")
710
@NotNull(message = "삭제하려는 방 ID를 반드시 입력해야합니다")
811
Long roomId
912
) {

src/main/java/org/ezcode/codetest/application/chatting/dto/request/ChatRoomSaveRequest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,14 @@
33
import org.ezcode.codetest.domain.chat.model.ChatRoom;
44
import org.ezcode.codetest.domain.user.model.entity.User;
55

6+
import io.swagger.v3.oas.annotations.media.Schema;
67
import jakarta.validation.constraints.NotBlank;
78
import jakarta.validation.constraints.Size;
89

10+
@Schema(description = "채팅방 생성 요청")
911
public record ChatRoomSaveRequest(
1012

13+
@Schema(description = "생성할 채팅방 제목")
1114
@NotBlank(message = "채팅방 제목은 비어있을 수 없습니다")
1215
@Size(message = "채팅방 이름 길이는 1~15자 사이로 작성해주세요", min = 1, max = 15)
1316
String title

src/main/java/org/ezcode/codetest/application/chatting/dto/request/ChatSaveRequest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,12 @@
44
import org.ezcode.codetest.domain.chat.model.ChatRoom;
55
import org.ezcode.codetest.domain.user.model.entity.User;
66

7+
import io.swagger.v3.oas.annotations.media.Schema;
8+
9+
@Schema(description = "채팅 메시지 생성 요청")
710
public record ChatSaveRequest(
811

12+
@Schema(description = "전송할 채팅 메시지")
913
String message
1014
) {
1115

src/main/java/org/ezcode/codetest/application/chatting/dto/response/ChatResponse.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,21 @@
44

55
import org.ezcode.codetest.domain.chat.model.Chat;
66

7+
import io.swagger.v3.oas.annotations.media.Schema;
8+
9+
@Schema(description = "채팅 메시지 반환")
710
public record ChatResponse(
811

12+
@Schema(description = "채팅 메시지 생성날짜")
913
LocalDateTime time,
1014

15+
@Schema(description = "사용자 닉네임")
1116
String name,
1217

18+
@Schema(description = "사용자 등급")
1319
String tier,
1420

21+
@Schema(description = "채팅 메시지")
1522
String message
1623
) {
1724
public static ChatResponse from(Chat chat) {

src/main/java/org/ezcode/codetest/application/chatting/dto/response/RoomChangedResponse.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,23 @@
33
import org.ezcode.codetest.application.chatting.port.cache.ChatRoomCache;
44
import org.ezcode.codetest.domain.chat.model.ChatRoom;
55

6+
import io.swagger.v3.oas.annotations.media.Schema;
67
import lombok.Builder;
78

89
@Builder
10+
@Schema(description = "채팅방 변경에 대한 응답")
911
public record RoomChangedResponse(
1012

13+
@Schema(description = "채팅방 ID")
1114
Long roomId,
1215

16+
@Schema(description = "채팅방 제목")
1317
String title,
1418

19+
@Schema(description = "채팅방 인원수")
1520
Long headCount,
1621

22+
@Schema(description = "이벤트 타입(삭제, 변경, 생성)")
1723
String eventType
1824
) {
1925

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package org.ezcode.codetest.application.game.dto.mapper;
2+
import org.ezcode.codetest.application.game.dto.response.AccessoryResponse;
3+
import org.ezcode.codetest.application.game.dto.response.DefenceResponse;
4+
import org.ezcode.codetest.application.game.dto.response.ItemResponse;
5+
import org.ezcode.codetest.application.game.dto.response.WeaponResponse;
6+
import org.ezcode.codetest.domain.game.model.entity.Accessory;
7+
import org.ezcode.codetest.domain.game.model.entity.Defence;
8+
import org.ezcode.codetest.domain.game.model.entity.Item;
9+
import org.ezcode.codetest.domain.game.model.entity.Weapon;
10+
import org.mapstruct.Mapper;
11+
import org.mapstruct.SubclassExhaustiveStrategy;
12+
import org.mapstruct.SubclassMapping;
13+
14+
@Mapper(
15+
componentModel = "spring",
16+
subclassExhaustiveStrategy = SubclassExhaustiveStrategy.RUNTIME_EXCEPTION
17+
)
18+
public interface GameMapper {
19+
20+
@SubclassMapping(target = WeaponResponse.class, source = Weapon.class)
21+
@SubclassMapping(target = DefenceResponse.class, source = Defence.class)
22+
@SubclassMapping(target = AccessoryResponse.class, source = Accessory.class)
23+
ItemResponse toItemResponse(Item item);
24+
25+
WeaponResponse toItemResponse(Weapon weapon);
26+
DefenceResponse toItemResponse(Defence defence);
27+
AccessoryResponse toItemResponse(Accessory accessory);
28+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.ezcode.codetest.application.game.dto.request;
2+
3+
import org.ezcode.codetest.domain.game.model.entity.Accessory;
4+
import org.ezcode.codetest.domain.game.model.entity.Item;
5+
import org.ezcode.codetest.domain.game.model.enums.AccessoryType;
6+
7+
import com.fasterxml.jackson.annotation.JsonTypeName;
8+
9+
import jakarta.validation.constraints.Min;
10+
import jakarta.validation.constraints.NotBlank;
11+
import jakarta.validation.constraints.NotNull;
12+
import lombok.Getter;
13+
14+
@JsonTypeName("accessory")
15+
@Getter
16+
public class AccessorySaveRequest extends ItemSaveRequest {
17+
18+
@NotBlank
19+
private final String accessoryType;
20+
21+
@NotNull
22+
@Min(0)
23+
private final Integer speed;
24+
25+
@NotNull @Min(0)
26+
private final Integer crit;
27+
28+
@NotNull @Min(0)
29+
private final Integer stun;
30+
31+
@NotNull @Min(0)
32+
private final Integer evasion;
33+
34+
@NotNull @Min(0)
35+
private final Integer accuracy;
36+
37+
public AccessorySaveRequest(
38+
String grade,
39+
String name,
40+
String description,
41+
String accessoryType,
42+
Integer speed,
43+
Integer crit,
44+
Integer stun,
45+
Integer evasion,
46+
Integer accuracy
47+
) {
48+
super(grade, name, description);
49+
this.accessoryType = accessoryType;
50+
this.speed = speed;
51+
this.crit = crit;
52+
this.stun = stun;
53+
this.evasion = evasion;
54+
this.accuracy = accuracy;
55+
}
56+
57+
@Override
58+
public Item toItem() {
59+
AccessoryType at = AccessoryType.valueOf(accessoryType.trim().toUpperCase());
60+
return Accessory.builder()
61+
.id(null)
62+
.type(at)
63+
.grade(getGrade())
64+
.name(getName())
65+
.description(getDescription())
66+
.speed(getSpeed())
67+
.crit(getCrit())
68+
.stun(getStun())
69+
.evasion(getEvasion())
70+
.accuracy(getAccuracy())
71+
.build();
72+
}
73+
}
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;
2+
3+
import jakarta.validation.constraints.NotBlank;
4+
5+
public record CharacterSaveRequest(
6+
7+
@NotBlank(message = "이름은 공백일 수 없습니다.")
8+
String name
9+
10+
) {
11+
}

0 commit comments

Comments
 (0)