Skip to content

Commit f2bcb45

Browse files
committed
Merge branch 'develop'
2 parents 708637a + a9427ea commit f2bcb45

File tree

5 files changed

+115
-9
lines changed

5 files changed

+115
-9
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package com.mbtips.domain.addition.controller;
2+
3+
import com.mbtips.common.annotation.LoginUser;
4+
import com.mbtips.common.response.ApiResponse;
5+
import com.mbtips.domain.addition.service.AdditionService;
6+
import com.mbtips.domain.user.User;
7+
import io.swagger.v3.oas.annotations.Operation;
8+
import io.swagger.v3.oas.annotations.security.SecurityRequirements;
9+
import lombok.RequiredArgsConstructor;
10+
import org.springframework.web.bind.annotation.GetMapping;
11+
import org.springframework.web.bind.annotation.PathVariable;
12+
import org.springframework.web.bind.annotation.RequestMapping;
13+
import org.springframework.web.bind.annotation.RestController;
14+
15+
@RestController
16+
@SecurityRequirements
17+
@RequiredArgsConstructor
18+
@RequestMapping("/api/addition")
19+
public class AdditionController {
20+
21+
private final AdditionService additionService;
22+
23+
@GetMapping("/tips/{virtualFriendId}")
24+
@Operation(summary = "대화 꿀팁", description = "해당 AI와의 대화 꿀팁을 반환합니다.")
25+
public ApiResponse<String> requestConversationTips(@PathVariable Long virtualFriendId, @LoginUser User user){
26+
String result = additionService.requestConversationTips(virtualFriendId);
27+
return ApiResponse.success(result);
28+
}
29+
30+
31+
@GetMapping("/temperature/{conversationId}")
32+
@Operation(summary = "대화 온도", description = "현재까지 대화의 온도를 측정합니다.")
33+
public ApiResponse<String> requestTemperature(@PathVariable Long conversationId){
34+
String result = additionService.requestTemperature(conversationId);
35+
return ApiResponse.success(result);
36+
}
37+
38+
@GetMapping("/recommendtopic/{virtualFriendId}")
39+
@Operation(summary = "대화 주제 추천", description = "해당 AI와의 대화 주제를 추천합니다.")
40+
public ApiResponse<String> reqeustRecommendTopic(@PathVariable Long virtualFriendId) {
41+
String result = additionService.requestRecommendTopic(virtualFriendId);
42+
return ApiResponse.success(result);
43+
}
44+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package com.mbtips.domain.addition.service;
2+
3+
import com.mbtips.clova.dto.Message;
4+
import com.mbtips.common.mbtiinfo.MbtiTraits;
5+
import com.mbtips.common.mbtiinfo.MbtiType;
6+
import com.mbtips.domain.conversation.service.ConversationService;
7+
import com.mbtips.domain.converstation.Conversation;
8+
import com.mbtips.domain.message.dto.response.GetMessageResponseDto;
9+
import com.mbtips.domain.virtualfriend.VirtualFriend;
10+
import com.mbtips.domain.virtualfriend.VirtualFriendService;
11+
import com.mbtips.domain.virtualfriend.response.VirtualFriendInfoResponse;
12+
import com.mbtips.message.application.manager.MessageManager;
13+
import com.mbtips.message.application.service.MessageService;
14+
import lombok.RequiredArgsConstructor;
15+
import lombok.extern.slf4j.Slf4j;
16+
import org.springframework.stereotype.Service;
17+
18+
import java.util.ArrayList;
19+
import java.util.List;
20+
21+
@Service
22+
@RequiredArgsConstructor
23+
@Slf4j
24+
public class AdditionService {
25+
26+
public final MessageManager messageManager;
27+
public final ConversationService conversationService;
28+
public final MessageService messageService;
29+
public final VirtualFriendService virtualFriendService;
30+
public String requestConversationTips(Long virtualFriendId) {
31+
VirtualFriendInfoResponse virtualFriend = virtualFriendService.findFriendInfoById(virtualFriendId);
32+
33+
String mbtiTrait = MbtiTraits.getTrait(MbtiType.valueOf(virtualFriend.mbti()));
34+
mbtiTrait = mbtiTrait.substring(mbtiTrait.indexOf("특징을 설명해주면 다음과 같아"));
35+
String requestPrompt = mbtiTrait + ", 이 mbti와 대화할 때, 꿀팁 알려줘";
36+
log.debug("requstPrompt : {}", requestPrompt);
37+
String result = messageManager.messageRequest(requestPrompt);
38+
return result;
39+
}
40+
41+
public String requestTemperature(Long conversationId) {
42+
Conversation conversation = conversationService.findById(conversationId);
43+
List<GetMessageResponseDto> messages = messageService.getMessagesOfConversationId(conversationId);
44+
45+
String[] messageList = {
46+
"사용자: 안녕하세요, 오늘 기분이 어떠세요?",
47+
"AI: 안녕하세요, 오늘 기분이 활기차고 즐거워요.",
48+
"사용자: 오늘 특별한 계획이 있으세요?",
49+
"AI: 네, 친구와 함께 신나는 시간을 보낼 예정입니다."
50+
};
51+
String requestConversation = String.join(", ", messageList);
52+
String prompt = requestConversation + "현재까지의 대화 온도 측정해서 0~100 사이의 숫자로만 대답해줘 냉정하게 판단해주고, 숫자로만 대답해.";
53+
log.debug("prompt : {}", prompt);
54+
String temperatureResponse = messageManager.messageRequest(prompt);
55+
String result = temperatureResponse.replaceAll("[^0-9]", "");
56+
return result;
57+
}
58+
59+
public String requestRecommendTopic(Long virtualFriendId) {
60+
VirtualFriendInfoResponse virtualFriend = virtualFriendService.findFriendInfoById(virtualFriendId);
61+
String mbtiTrait = MbtiTraits.getTrait(MbtiType.valueOf(virtualFriend.mbti()));
62+
mbtiTrait = mbtiTrait.substring(mbtiTrait.indexOf("특징을 설명해주면 다음과 같아"));
63+
String requestPrompt = mbtiTrait + ", 이 mbti와 대화할 때, 맞는 대화 주제 키워드 5개만 추천해줘, 짧게 단어로만 이야기해줘";
64+
65+
String result = messageManager.messageRequest(requestPrompt);
66+
log.debug("result : {}", result);
67+
return result;
68+
}
69+
}

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

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,6 @@ public class VirtualFriendController {
2222

2323
private final VirtualFriendService virtualFriendService;
2424

25-
/**
26-
*
27-
*/
2825
@GetMapping
2926
@Operation(summary = "가상친구, 채팅방 리스트 조회", description = "userId기준으로 채팅방+가상친구 리스트를 조회합니다.")
3027
public ApiResponse<List<VirtualFriendResponse>> getVirtualFriends(@LoginUser User user){
@@ -36,13 +33,10 @@ public ApiResponse<List<VirtualFriendResponse>> getVirtualFriends(@LoginUser Use
3633
@GetMapping("/{virtualFriendId}")
3734
@Operation(summary = "가상친구 상세 조회", description = "virtualFriendId를 기준으로 가상친구를 상세조회합니다.")
3835
public ApiResponse<VirtualFriendInfoResponse> getVirtualFriend(@LoginUser User user, @PathVariable Long virtualFriendId) {
39-
VirtualFriendInfoResponse result = virtualFriendService.findById(virtualFriendId);
36+
VirtualFriendInfoResponse result = virtualFriendService.findFriendInfoById(virtualFriendId);
4037
return ApiResponse.success(result);
4138
}
4239

43-
/**
44-
* todo - request validation 적용
45-
*/
4640
@PostMapping
4741
@Operation(summary = "가상친구 생성", description = "가상친구 생성을 요청하며, 채팅방이 생성됩니다.")
4842
public ApiResponse<VirtualFriendResponse> createVirtualFriend(@Valid @RequestBody VirtualFriendRequest virtualFriendRequest,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ public String makePrompt(Long conversationId) {
9191
return result;
9292
}
9393

94-
public VirtualFriendInfoResponse findById(Long virtualFriendId) {
94+
public VirtualFriendInfoResponse findFriendInfoById(Long virtualFriendId) {
9595
VirtualFriend virtualFriend = virtualFriendRepository.findById(virtualFriendId);
9696
List<String> interest = interestRepository.findTopicsByVirtualFriendId(virtualFriendId);
9797
log.debug("interest : {}", interest);

api/src/main/java/com/mbtips/domain/virtualfriend/request/VirtualFriendRequest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ public record VirtualFriendRequest(
2323
@NotBlank(message = "관계 유형은 필수입니다.")
2424
String relationship,
2525

26-
// @Pattern(regexp = "^(MAIL|FEMALE)$", message = "성별은 MAIL 또는 FEMALE만 가능합니다.")
2726
Gender gender,
2827

2928
@Pattern(

0 commit comments

Comments
 (0)