Skip to content

Commit 7a23eda

Browse files
committed
feat: Fairy-Emotion 도메인 간 의존성 정리
1 parent 321763e commit 7a23eda

File tree

16 files changed

+82
-116
lines changed

16 files changed

+82
-116
lines changed

src/main/java/com/nexters/teamace/common/exception/ErrorType.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ public enum ErrorType {
2424
/** 404 NOT_FOUND */
2525
RESOURCE_NOT_FOUND(HttpStatus.NOT_FOUND, ErrorCode.E404, "Resource not found"),
2626
USER_NOT_FOUND(HttpStatus.NOT_FOUND, ErrorCode.E404, "User not found"),
27+
ENTITY_NOT_FOUND(HttpStatus.NOT_FOUND, ErrorCode.E404, "Entity not found"),
2728

2829
/** 409 CONFLICT */
2930
USER_ALREADY_EXISTS(HttpStatus.CONFLICT, ErrorCode.E409, "User already exists"),

src/main/java/com/nexters/teamace/common/presentation/GlobalExceptionHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.nexters.teamace.common.exception.CustomException;
44
import com.nexters.teamace.common.exception.ErrorType;
5+
import jakarta.persistence.EntityNotFoundException;
56
import jakarta.validation.ConstraintViolationException;
67
import java.util.List;
78
import java.util.Map;
@@ -127,6 +128,15 @@ public ResponseEntity<ApiResponse<Void>> handleNoResourceFoundException(
127128
ErrorType.RESOURCE_NOT_FOUND.getStatus());
128129
}
129130

131+
@ExceptionHandler(EntityNotFoundException.class)
132+
public ResponseEntity<ApiResponse<Void>> handleEntityNotFoundException(
133+
NoResourceFoundException e) {
134+
log.warn("Entity not found error occurred: {}", e.getMessage(), e);
135+
return new ResponseEntity<>(
136+
ApiResponse.error(ErrorType.ENTITY_NOT_FOUND),
137+
ErrorType.ENTITY_NOT_FOUND.getStatus());
138+
}
139+
130140
@ExceptionHandler(CustomException.class)
131141
public ResponseEntity<ApiResponse<Void>> handleNoSuchElement(CustomException e) {
132142
final String message = e.getMessage();

src/main/java/com/nexters/teamace/emotion/application/EmotionService.java

Lines changed: 0 additions & 17 deletions
This file was deleted.

src/main/java/com/nexters/teamace/emotion/domain/EmotionRepository.java

Lines changed: 0 additions & 7 deletions
This file was deleted.

src/main/java/com/nexters/teamace/emotion/infrastructure/EmotionRepositoryImpl.java

Lines changed: 0 additions & 24 deletions
This file was deleted.
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.nexters.teamace.fairy.application;
22

3+
import com.nexters.teamace.fairy.application.dto.FairyInfo;
34
import java.util.List;
45

5-
public record FairyResult(List<FairyCandidate> fairies) {}
6+
public record FairyResult(List<FairyInfo> fairies) {}

src/main/java/com/nexters/teamace/fairy/application/FairyService.java

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@
66
import com.nexters.teamace.conversation.application.ConversationService;
77
import com.nexters.teamace.conversation.domain.ConversationType;
88
import com.nexters.teamace.conversation.domain.EmotionSelectConversation;
9-
import com.nexters.teamace.emotion.application.EmotionService;
10-
import com.nexters.teamace.emotion.domain.Emotion;
11-
import com.nexters.teamace.fairy.domain.Fairy;
9+
import com.nexters.teamace.fairy.application.dto.FairyInfo;
1210
import com.nexters.teamace.fairy.domain.FairyRepository;
11+
import com.nexters.teamace.fairy.infrastructure.dto.FairyProjection;
1312
import java.util.List;
1413
import lombok.RequiredArgsConstructor;
1514
import org.springframework.stereotype.Service;
@@ -20,7 +19,6 @@ public class FairyService {
2019

2120
private final ConversationService conversationService;
2221
private final ChatRoomService chatRoomService;
23-
private final EmotionService emotionService;
2422
private final FairyRepository fairyRepository;
2523

2624
public FairyResult getFairy(UserInfo user, Long chatRoomId) {
@@ -39,29 +37,27 @@ public FairyResult getFairy(UserInfo user, Long chatRoomId) {
3937
(EmotionSelectConversation)
4038
conversationService.chat(type.getType(), type, context, "");
4139

42-
// 3. 감정 후보 기반으로 emotion 조회
43-
List<Emotion> emotions =
44-
emotionService.findAllByNamesIn(
40+
// 3. 감정 후보 기반으로 fairy 후보 조회
41+
List<FairyProjection> fairyProjections =
42+
fairyRepository.findAllByEmotionNames(
4543
emotionSelectConversation.emotions().stream()
4644
.map(EmotionSelectConversation.Emotions::name)
4745
.toList());
4846

49-
// 4. emotion 기반으로 fairy 조회 (fairy -> emotion의 단방향 참조를 유지하고 싶다면?)
50-
List<Fairy> fairies =
51-
fairyRepository.findAllByEmotionIdIn(
52-
emotions.stream().map(Emotion::getId).toList());
47+
// 4. FairyInfo로 변환
48+
List<FairyInfo> fairyInfos =
49+
fairyProjections.stream()
50+
.map(
51+
p ->
52+
new FairyInfo(
53+
p.id(),
54+
p.name(),
55+
p.image(),
56+
p.silhouetteImage(),
57+
p.emotion()))
58+
.toList();
5359

5460
// 5. FairyResult에 맞게 정제하여 반환
55-
return new FairyResult(
56-
fairies.stream()
57-
.map(
58-
f ->
59-
new FairyCandidate(
60-
f.getId(),
61-
f.getName(),
62-
f.getImageUrl(),
63-
f.getSilhouetteImageUrl(),
64-
f.getEmotion().getName()))
65-
.toList());
61+
return new FairyResult(fairyInfos);
6662
}
6763
}

src/main/java/com/nexters/teamace/fairy/application/FairyCandidate.java renamed to src/main/java/com/nexters/teamace/fairy/application/dto/FairyInfo.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.nexters.teamace.fairy.application;
1+
package com.nexters.teamace.fairy.application.dto;
22

3-
public record FairyCandidate(
3+
public record FairyInfo(
44
Long id, String name, String image, String silhouetteImage, String emotion) {}

src/main/java/com/nexters/teamace/fairy/domain/Fairy.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import static lombok.AccessLevel.PROTECTED;
44

5-
import com.nexters.teamace.emotion.domain.Emotion;
65
import lombok.Getter;
76
import lombok.NoArgsConstructor;
87

@@ -14,29 +13,29 @@ public class Fairy {
1413
private String name;
1514
private String imageUrl;
1615
private String silhouetteImageUrl;
17-
private Emotion emotion;
16+
private Long emotionId;
1817

1918
public Fairy(
2019
final String name,
2120
final String imageUrl,
2221
final String silhouetteImageUrl,
23-
final Emotion emotion) {
22+
final Long emotionId) {
2423
this.name = name;
2524
this.imageUrl = imageUrl;
2625
this.silhouetteImageUrl = silhouetteImageUrl;
27-
this.emotion = emotion;
26+
this.emotionId = emotionId;
2827
}
2928

3029
public Fairy(
3130
final Long id,
3231
final String name,
3332
final String imageUrl,
3433
final String silhouetteImageUrl,
35-
final Emotion emotion) {
34+
final Long emotionId) {
3635
this.id = id;
3736
this.name = name;
3837
this.imageUrl = imageUrl;
3938
this.silhouetteImageUrl = silhouetteImageUrl;
40-
this.emotion = emotion;
39+
this.emotionId = emotionId;
4140
}
4241
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.nexters.teamace.fairy.domain;
22

3+
import com.nexters.teamace.fairy.infrastructure.dto.FairyProjection;
34
import java.util.List;
45
import java.util.Optional;
56

@@ -8,5 +9,5 @@ public interface FairyRepository {
89

910
Optional<Fairy> findById(Long id);
1011

11-
List<Fairy> findAllByEmotionIdIn(List<Long> emotionIds);
12+
List<FairyProjection> findAllByEmotionNames(List<String> emotionNames);
1213
}

0 commit comments

Comments
 (0)