Skip to content

Commit 708637a

Browse files
committed
Merge branch 'develop'
2 parents 3610808 + 6a21e05 commit 708637a

File tree

21 files changed

+328
-30
lines changed

21 files changed

+328
-30
lines changed

api/src/main/java/com/mbtips/common/mbtiinfo/MbtiTraits.java

Lines changed: 31 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.mbtips.common.mbtiinfo;
2+
3+
public enum MbtiType {
4+
ISTJ, ISFJ, INFJ, INTJ,
5+
ISTP, ISFP, INFP, INTP,
6+
ESTP, ESFP, ENFP, ENTP,
7+
ESTJ, ESFJ, ENFJ, ENTJ
8+
}

api/src/main/java/com/mbtips/domain/fastfriend/controller/dto/request/FastFriendRequest.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,39 @@
11
package com.mbtips.domain.fastfriend.controller.dto.request;
22

3+
import com.mbtips.domain.virtualfriend.enums.Gender;
34
import com.mbtips.fastfriend.entity.FastFriend;
45
import jakarta.validation.constraints.Pattern;
56

7+
import java.util.List;
8+
69
public record FastFriendRequest(
710

11+
String fastFriendName,
12+
13+
int fastFriendAge,
14+
15+
String fastFriendRelationship,
16+
17+
Gender gender,
18+
19+
820
@Pattern(
921
regexp = "^(INTJ|INTP|ENTJ|ENTP|INFJ|INFP|ENFJ|ENFP|ISTJ|ISFJ|ESTJ|ESFJ|ISTP|ISFP|ESTP|ESFP)$",
1022
message = "유효하지 않은 mbti입니다. 16가지중 하나를 입력해주세요."
1123
)
1224
String mbti,
13-
String fastFriendName,
14-
int fastFriendAge,
15-
String fastFriendSex,
16-
String fastFriendRelationship
25+
26+
27+
List<String> interests
28+
1729
) {
1830

1931
public FastFriend toEntity(FastFriendRequest request) {
2032
return FastFriend.builder()
2133
.mbti(request.mbti)
2234
.fastFriendName(request.fastFriendName)
2335
.fastFriendAge(request.fastFriendAge)
24-
.fastFriendSex(request.fastFriendSex)
36+
.fastFriendSex(request.gender)
2537
.fastFriendRelationship(request.fastFriendRelationship)
2638
.build();
2739
}

api/src/main/java/com/mbtips/domain/fastfriend/controller/dto/response/FastFriendResponse.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.mbtips.domain.fastfriend.controller.dto.response;
22

3+
import com.mbtips.domain.virtualfriend.enums.Gender;
34
import com.mbtips.fastfriend.entity.FastFriend;
45

56
public record FastFriendResponse (
67
Long fastFriendId,
78
String mbti,
89
String fastFriendName,
910
int fastFriendAge,
10-
String fastFriendSex,
11+
Gender fastFriendSex,
1112
String fastFriendRelationship
1213
){
1314

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,25 @@
11
package com.mbtips.domain.fastfriend.service;
22

33
import com.mbtips.clova.client.ClovaApiFeignClient;
4-
import com.mbtips.clova.dto.ChatRequest;
5-
import com.mbtips.clova.dto.Message;
4+
import com.mbtips.common.provider.ClovaApiKeyProvider;
65
import com.mbtips.domain.fastfriend.controller.dto.request.FastFriendMessageRequest;
76
import com.mbtips.domain.fastfriend.controller.dto.request.FastFriendRequest;
87
import com.mbtips.fastfriend.FastFriendRepository;
98
import com.mbtips.fastfriend.entity.FastFriend;
9+
import com.mbtips.message.application.manager.MessageManager;
1010
import lombok.RequiredArgsConstructor;
1111
import lombok.extern.slf4j.Slf4j;
1212
import org.springframework.stereotype.Service;
1313

14-
import java.util.Arrays;
15-
import java.util.UUID;
1614

1715
@Service
1816
@RequiredArgsConstructor
1917
@Slf4j
2018
public class FastFriendService {
2119
private final FastFriendRepository fastFriendRepository;
2220
private final ClovaApiFeignClient clovaApiFeignClient;
23-
24-
private static final String API_KEY = "";
21+
private final ClovaApiKeyProvider clovaApiKeyProvider;
22+
private final MessageManager messageManager;
2523
/**
2624
* to-do
2725
* - 가상친구생성api 호출 로직 작성
@@ -35,14 +33,8 @@ public Long createFastFriend(FastFriendRequest fastFriendRequest) {
3533
}
3634

3735
public String messageRequest(FastFriendMessageRequest request) {
38-
Message message = new Message("user", request.content());
39-
ChatRequest chatRequest = new ChatRequest(Arrays.asList(message));
40-
String responseMessage = clovaApiFeignClient.getResponse(
41-
"Bearer " + API_KEY,
42-
UUID.randomUUID().toString(),
43-
chatRequest
44-
);
45-
log.debug(responseMessage);
46-
return responseMessage;
36+
String result = messageManager.messageRequest(request.content());
37+
log.debug(result);
38+
return result;
4739
}
4840
}

api/src/main/java/com/mbtips/domain/virtualfriend/VirtualFriendController.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.mbtips.common.annotation.LoginUser;
44
import com.mbtips.domain.user.User;
55
import com.mbtips.domain.virtualfriend.request.VirtualFriendRequest;
6+
import com.mbtips.domain.virtualfriend.response.VirtualFriendInfoResponse;
67
import com.mbtips.domain.virtualfriend.response.VirtualFriendResponse;
78
import com.mbtips.common.response.ApiResponse;
89
import io.swagger.v3.oas.annotations.Operation;
@@ -32,6 +33,13 @@ public ApiResponse<List<VirtualFriendResponse>> getVirtualFriends(@LoginUser Use
3233
return ApiResponse.success(result);
3334
}
3435

36+
@GetMapping("/{virtualFriendId}")
37+
@Operation(summary = "가상친구 상세 조회", description = "virtualFriendId를 기준으로 가상친구를 상세조회합니다.")
38+
public ApiResponse<VirtualFriendInfoResponse> getVirtualFriend(@LoginUser User user, @PathVariable Long virtualFriendId) {
39+
VirtualFriendInfoResponse result = virtualFriendService.findById(virtualFriendId);
40+
return ApiResponse.success(result);
41+
}
42+
3543
/**
3644
* todo - request validation 적용
3745
*/
@@ -50,4 +58,13 @@ public ApiResponse<Void> deleteVirtualFriend(@PathVariable Long friendId, @Login
5058
virtualFriendService.deleteVirtualFriend(friendId, user);
5159
return ApiResponse.success();
5260
}
61+
62+
@PutMapping("/{virtualFriendId}")
63+
@Operation(summary = "가상친구 정보 수정", description = "가상친구 정보를 수정합니다.")
64+
public ApiResponse<VirtualFriendInfoResponse> updateVirtualFriend(@PathVariable Long virtualFriendId, @Valid @RequestBody VirtualFriendRequest virtualFriendRequest,
65+
@LoginUser User user) {
66+
VirtualFriendInfoResponse result = virtualFriendService.updateVirtualFriend(virtualFriendId, virtualFriendRequest, user);
67+
return ApiResponse.success(result);
68+
}
69+
5370
}

api/src/main/java/com/mbtips/domain/virtualfriend/VirtualFriendService.java

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.mbtips.domain.virtualfriend;
22

3+
import com.mbtips.common.mbtiinfo.MbtiTraits;
4+
import com.mbtips.common.mbtiinfo.MbtiType;
5+
import com.mbtips.conversation.interfaces.ConversationRepository;
36
import com.mbtips.domain.conversation.service.ConversationService;
47
import com.mbtips.domain.converstation.Conversation;
58
import com.mbtips.domain.user.User;
69
import com.mbtips.domain.virtualfriend.request.VirtualFriendRequest;
10+
import com.mbtips.domain.virtualfriend.response.VirtualFriendInfoResponse;
711
import com.mbtips.domain.virtualfriend.response.VirtualFriendResponse;
812
import com.mbtips.virtualfriend.entity.InterestEntity;
913
import com.mbtips.virtualfriend.entity.VirtualFriendEntity;
1014
import com.mbtips.virtualfriend.interfaces.InterestRepository;
1115
import com.mbtips.virtualfriend.interfaces.VirtualFriendRepository;
1216
import lombok.RequiredArgsConstructor;
17+
import lombok.extern.slf4j.Slf4j;
1318
import org.springframework.stereotype.Service;
1419

1520
import java.util.ArrayList;
@@ -18,11 +23,13 @@
1823

1924
@Service
2025
@RequiredArgsConstructor
26+
@Slf4j
2127
public class VirtualFriendService {
2228

2329
private final VirtualFriendRepository virtualFriendRepository;
2430
private final ConversationService conversationService;
2531
private final InterestRepository interestRepository;
32+
private final ConversationRepository conversationRepository;
2633

2734
public List<VirtualFriendResponse> getVirtualFriendsByUserId(User user) {
2835
List<Object[]> friends = virtualFriendRepository.findVirtualFriendAndConversation(user.getUserId());
@@ -65,8 +72,54 @@ public void deleteVirtualFriend(Long virtualFriendId, User user) {
6572

6673
VirtualFriend virtualFriend = virtualFriendRepository.findById(virtualFriendId);
6774

75+
interestRepository.deleteInterestByVirtualFriend(virtualFriend);
6876
conversationService.deleteConversation(virtualFriend);
6977
virtualFriendRepository.delete(virtualFriend);
7078

7179
}
80+
81+
public String makePrompt(Long conversationId) {
82+
Conversation conversation = conversationRepository.findById(conversationId);
83+
VirtualFriend virtualFriend = conversation.getVirtualFriend();
84+
// 대화방 기록
85+
// 가상친구 특성
86+
String mbti = virtualFriend.getMbti();
87+
MbtiType mbtiType = MbtiType.valueOf(mbti);
88+
String result = MbtiTraits.getTrait(mbtiType);
89+
// 가상친구 관심사
90+
result += ". 이제 대화를 시작해보자!";
91+
return result;
92+
}
93+
94+
public VirtualFriendInfoResponse findById(Long virtualFriendId) {
95+
VirtualFriend virtualFriend = virtualFriendRepository.findById(virtualFriendId);
96+
List<String> interest = interestRepository.findTopicsByVirtualFriendId(virtualFriendId);
97+
log.debug("interest : {}", interest);
98+
VirtualFriendInfoResponse result = VirtualFriendInfoResponse.from(virtualFriend, interest);
99+
return result;
100+
}
101+
102+
public VirtualFriendInfoResponse updateVirtualFriend(Long virtualFriendId, VirtualFriendRequest req, User user) {
103+
VirtualFriend virtualFriend = VirtualFriend.builder()
104+
.user(user)
105+
.name(req.friendName())
106+
.mbti(req.mbti())
107+
.age(req.age())
108+
.gender(req.gender())
109+
.relationship(req.relationship())
110+
.build();
111+
VirtualFriend updateFriend = virtualFriendRepository.update(virtualFriendId, virtualFriend);
112+
interestRepository.deleteInterestByVirtualFriend(updateFriend);
113+
List<Interest> interests = req.interests()
114+
.stream()
115+
.map(topic -> Interest.builder()
116+
.virtualFriend(updateFriend)
117+
.topic(topic)
118+
.build())
119+
.toList();
120+
interestRepository.saveAll(interests);
121+
122+
List<String> topics = interests.stream().map(Interest::getTopic).collect(Collectors.toList());
123+
return VirtualFriendInfoResponse.from(updateFriend, topics);
124+
}
72125
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.mbtips.domain.virtualfriend.response;
2+
3+
import com.mbtips.domain.virtualfriend.VirtualFriend;
4+
import com.mbtips.domain.virtualfriend.enums.Gender;
5+
6+
import java.util.List;
7+
8+
public record VirtualFriendInfoResponse(
9+
Long virtualFriendId,
10+
String mbti,
11+
String name,
12+
int age,
13+
Gender gender,
14+
String relationship,
15+
List<String> interest
16+
) {
17+
public static VirtualFriendInfoResponse from(VirtualFriend virtualFriend, List<String> interest){
18+
return new VirtualFriendInfoResponse(
19+
virtualFriend.getVirtualFriendId(),
20+
virtualFriend.getMbti(),
21+
virtualFriend.getName(),
22+
virtualFriend.getAge(),
23+
virtualFriend.getGender(),
24+
virtualFriend.getRelationship(),
25+
interest
26+
);
27+
}
28+
}
Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,68 @@
11
package com.mbtips.message.application.manager;
22

3+
import com.fasterxml.jackson.core.JsonProcessingException;
4+
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.mbtips.clova.client.ClovaApiFeignClient;
6+
import com.mbtips.clova.dto.ChatRequest;
7+
import com.mbtips.clova.dto.ClovaApiResponse;
8+
import com.mbtips.common.provider.ClovaApiKeyProvider;
39
import com.mbtips.domain.conversation.service.ConversationService;
410
import com.mbtips.domain.converstation.Conversation;
511
import com.mbtips.domain.message.Message;
612
import com.mbtips.domain.message.dto.request.CreateMessageRequestDto;
713
import com.mbtips.domain.user.User;
814
import com.mbtips.message.application.service.MessageService;
915
import lombok.RequiredArgsConstructor;
16+
import lombok.extern.slf4j.Slf4j;
1017
import org.springframework.stereotype.Service;
1118

19+
import java.util.Arrays;
20+
import java.util.Objects;
21+
import java.util.UUID;
22+
1223
@Service
1324
@RequiredArgsConstructor
25+
@Slf4j
1426
public class MessageManager {
1527

1628
private final MessageService messageService;
1729
private final ConversationService conversationService;
30+
private final ClovaApiFeignClient clovaApiFeignClient;
31+
private final ClovaApiKeyProvider clovaApiKeyProvider;
32+
private final ObjectMapper objectMapper;
1833

1934
public void sendMessage(User user, CreateMessageRequestDto createMessageRequestDto) {
2035
Conversation conversation = conversationService.findById(createMessageRequestDto.conversationId());
21-
Message message = Message.builder()
36+
37+
38+
Message requestMessage = Message.builder()
2239
.user(user)
2340
.conversation(conversation)
2441
.virtualFriend(conversation.getVirtualFriend())
2542
.messageContent(createMessageRequestDto.messageContent())
2643
.build();
2744

28-
messageService.saveMessage(message);
45+
messageService.saveMessage(requestMessage);
46+
47+
}
48+
49+
public String messageRequest(String content){
50+
com.mbtips.clova.dto.Message message = new com.mbtips.clova.dto.Message("user", content);
51+
ChatRequest chatRequest = new ChatRequest(Arrays.asList(message));
52+
String apiResult = clovaApiFeignClient.getResponse(
53+
"Bearer " + clovaApiKeyProvider.apiKey(),
54+
UUID.randomUUID().toString(),
55+
chatRequest
56+
);
57+
58+
log.debug("clovaResponse : {}" , apiResult);
59+
String resultResponse = "";
60+
try {
61+
ClovaApiResponse clovaApiResponse = objectMapper.readValue(apiResult, ClovaApiResponse.class);
62+
resultResponse = clovaApiResponse.getResult().getMessage().getContent();
63+
} catch (JsonProcessingException e) {
64+
throw new RuntimeException(e);
65+
}
66+
return resultResponse;
2967
}
3068
}

api/src/main/java/com/mbtips/message/controller/MessageController.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.mbtips.common.annotation.LoginUser;
55
import com.mbtips.common.response.ApiResponse;
66
import com.mbtips.domain.message.dto.request.CreateMessageRequestDto;
7+
import com.mbtips.domain.virtualfriend.VirtualFriendService;
78
import com.mbtips.message.application.manager.MessageManager;
89
import com.mbtips.message.application.service.MessageService;
910
import com.mbtips.domain.user.User;
@@ -22,6 +23,7 @@
2223
public class MessageController {
2324
private final MessageService messageService;
2425
private final MessageManager messageManager;
26+
private final VirtualFriendService virtualFriendService;
2527
private final ClovaApiFeignClient clovaApiFeignClient;
2628

2729
@GetMapping("/{conversationId}")
@@ -31,9 +33,13 @@ public ApiResponse<List<GetMessageResponseDto>> getMessagesOfConversationId(@Pat
3133
}
3234

3335
@PostMapping
34-
public ApiResponse<Void> createMessage(@RequestBody CreateMessageRequestDto createMessageRequestDto, @LoginUser User user){
36+
public ApiResponse<String> createMessage(@RequestBody CreateMessageRequestDto createMessageRequestDto, @LoginUser User user){
3537
messageManager.sendMessage(user, createMessageRequestDto);
36-
return ApiResponse.success();
38+
String content = createMessageRequestDto.messageContent();
39+
String prompt = virtualFriendService.makePrompt(createMessageRequestDto.conversationId());
40+
log.debug("prompt : {}", prompt);
41+
String clovaResponse = messageManager.messageRequest(content);
42+
return ApiResponse.success(clovaResponse);
3743
}
3844

3945
}

0 commit comments

Comments
 (0)