Skip to content

Commit

Permalink
Merge pull request #88 from KUSITMS-29th-TEAM-D/feature/#74/final-ref…
Browse files Browse the repository at this point in the history
…actoring

[refactor] : 답변 요약 내역 반환 시, 질문도 포함하도록 변경
  • Loading branch information
bbbang105 authored Jun 6, 2024
2 parents 8a05377 + cdb27b5 commit 0e81e84
Show file tree
Hide file tree
Showing 7 changed files with 158 additions and 77 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import jakarta.transaction.Transactional;
import kusitms.jangkku.domain.clova.application.ClovaService;
import kusitms.jangkku.domain.persona.constant.Conversation;
import kusitms.jangkku.domain.persona.constant.Question;
import kusitms.jangkku.domain.persona.dao.DiscoverPersonaChattingRepository;
import kusitms.jangkku.domain.persona.dao.DiscoverPersonaKeywordRepository;
Expand Down Expand Up @@ -59,11 +60,12 @@ public DiscoverPersonaDto.QuestionResponse getNewQuestion(String authorizationHe
discoverPersona.updateComplete(true); // 완료 처리
discoverPersonaRepository.save(discoverPersona);
}
String newQuestionContent = getQuestionContent(category, newQuestionNumber);
String newQuestionContent = getConversation(category, newQuestionNumber);

DiscoverPersonaChatting newDiscoverPersonaChatting = DiscoverPersonaChatting.builder()
.discoverPersona(discoverPersona)
.questionNumber(newQuestionNumber)
.question(getQuestion(category, newQuestionNumber))
.build();
discoverPersonaChattingRepository.save(newDiscoverPersonaChatting);

Expand All @@ -84,7 +86,7 @@ public DiscoverPersonaDto.AnswerResponse getReactionAndSummary(String authorizat
// 마지막 대화인 경우 마무리 멘트 추가
if (discoverPersona.getIsComplete()) {
String category = discoverPersona.getCategory();
String finalComment = getQuestionContent(category, 0);
String finalComment = getConversation(category, 0);
reaction += finalComment;
}
String summary = clovaService.createDiscoverPersonaSummary(answerRequest.getAnswer());
Expand Down Expand Up @@ -142,10 +144,10 @@ public DiscoverPersonaDto.SummaryResponse getSummaries(String authorizationHeade
DiscoverPersona loveDiscoverPersona = getDiscoverPersona(user, "사랑");
DiscoverPersona leisureDiscoverPersona = getDiscoverPersona(user, "여가");

List<String> healthSummaries = createSummaries(healthDiscoverPersona);
List<String> careerSummaries = createSummaries(careerDiscoverPersona);
List<String> loveSummaries = createSummaries(loveDiscoverPersona);
List<String> leisureSummaries = createSummaries(leisureDiscoverPersona);
List<DiscoverPersonaDto.QnA> healthSummaries = createSummaries(healthDiscoverPersona);
List<DiscoverPersonaDto.QnA> careerSummaries = createSummaries(careerDiscoverPersona);
List<DiscoverPersonaDto.QnA> loveSummaries = createSummaries(loveDiscoverPersona);
List<DiscoverPersonaDto.QnA> leisureSummaries = createSummaries(leisureDiscoverPersona);

return DiscoverPersonaDto.SummaryResponse.of(healthSummaries, careerSummaries, loveSummaries, leisureSummaries);
}
Expand Down Expand Up @@ -257,8 +259,19 @@ private int createNewQuestionNumber(List<Integer> questionNumbers) {
return randomQuestionNumber;
} */

// Enum에서 대화 내용을 가져오는 메서드
private String getConversation(String category, int number) {
for (Conversation conversation : Conversation.values()) {
if (conversation.getCategory().equals(category) && conversation.getNumber() == number) {
return conversation.getContent();
}
}

throw new PersonaException(PersonaErrorResult.NOT_FOUND_QUESTION);
}

// Enum에서 질문 내용을 가져오는 메서드
private String getQuestionContent(String category, int number) {
private String getQuestion(String category, int number) {
for (Question question : Question.values()) {
if (question.getCategory().equals(category) && question.getNumber() == number) {
return question.getContent();
Expand All @@ -272,18 +285,18 @@ private String getQuestionContent(String category, int number) {
private List<String> createStageQuestions(String category, List<DiscoverPersonaChatting> chattings) {
List<String> stageQuestions = new ArrayList<>();
for (DiscoverPersonaChatting discoverPersonaChatting : chattings) {
stageQuestions.add(getQuestionContent(category, discoverPersonaChatting.getQuestionNumber()));
stageQuestions.add(getConversation(category, discoverPersonaChatting.getQuestionNumber()));
}

return stageQuestions;
}

// 답변 요약 목록을 반환하는 메서드
protected List<String> createSummaries(DiscoverPersona discoverPersona) {
protected List<DiscoverPersonaDto.QnA> createSummaries(DiscoverPersona discoverPersona) {
List<DiscoverPersonaChatting> chattings = discoverPersonaChattingRepository.findAllByDiscoverPersonaOrderByCreatedDateAsc(discoverPersona);
List<String> summaries = new ArrayList<>();
List<DiscoverPersonaDto.QnA> summaries = new ArrayList<>();
for (DiscoverPersonaChatting discoverPersonaChatting : chattings) {
summaries.add(discoverPersonaChatting.getSummary());
summaries.add(DiscoverPersonaDto.QnA.of(discoverPersonaChatting));
}

return summaries;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package kusitms.jangkku.domain.persona.constant;

public enum Conversation {
HEALTH_Q1(1, "건강", """
안녕 나는 마음의 건강이라는 주제로 너와 대화하며, 너의 건강한 내면을 발견하고 너의 기둥을 찾을 수 있도록 도와주는 셀퍼야.
앞으로 내가 3가지 질문을 할건데, 잘 대답해봐.
그러면 첫번째 질문을 해볼게. 첫번째 질문은 가볍게 신체적 건강과 관한 내용이야.
좋아하는 운동이 있어? 그 운동이 왜 좋아?"""),
HEALTH_Q2(2, "건강", """
그럼 이제 조금 어려울 수도 있는데, 마음의 건강과 관한 질문을 해볼게.
심호흡 한 번 하고 대답해봐. 너는 평소에 더 행복하게, 건강하게 살기 위해서 남는 시간에 노력하는게 있어?"""),
HEALTH_Q3(3, "건강", """
그러면 마지막 질문!
마음이 건강하다는 건 어떤 뜻인거 같아? 너가 중요하다고 생각하는 가치(정직, 책임, 인간관계, 명예 등)를 떠올리면서 답변하면 더 좋을 거 같아."""),
CAREER_Q1(1, "커리어", """
안녕 나는 커리어와 관해서 너와 대화하면서, 너의 미래를 함께 생각해볼 커리어 셀퍼야.
앞으로 3가지 질문에 대한 답을 하면서 우리 같이 답을 찾아가보자.
그러면 첫번째 질문, 너는 어떤 미래를 그리고 있어? 꼭 직업이 아니여도 되고, 어떤 모습으로 하루하루를 살고 싶은지 말해줘.
아까 건강 셀퍼와 함께 삶의 가치에 대한 얘기를 했던 걸 떠올리면서 대답해보면 좋을 거 같아!"""),
CAREER_Q2(2, "커리어", """
삶에서 겪은 성취 중에 가장 큰 성취라면 뭐가 있을까? 혹은 아직 이루지 않은 너의 성취를 말해줘도 좋아."""),
CAREER_Q3(3, "커리어", """
그러면 그 성취와 유사한 혹은 그 성취를 이루기 위해서는 무엇을 해볼 수 있을까?"""),
LOVE_Q1(1, "사랑", """
안녕 나는 사랑이라는 주제로 너와 대화하며 , 사랑을 통해 너를 발견하고 너의 가치를 만들어가도록 도와주는 셀퍼야.
앞으로 내가 3가지 질문을 할건데, 잘 대답해줘.
너가 지금까지 살면서 가장 사랑했던 사람을 (그게 너일수도 있구) 떠올리면서 답하면 더 쉬울거야.
그럼 첫번째 질문이야.
너는 사랑에 이유가 있다고 생각해? 있다면 왜 있는지, 없다면 왜 없다고 생각하는지 말해줘!"""),
LOVE_Q2(2, "사랑", """
그러면 이어서 두번째 질문!
네 인생에서 사랑은 몇순위야? 다른 일이나 인간관계와 사랑을 비교했을때 뭐가 더 먼저라고 생각해?"""),
LOVE_Q3(3, "사랑", """
그럼 마지막 질문!
너는 사랑을 주는 걸 좋아해 아님 받는걸 좋아해?"""),
LEISURE_Q1(1, "여가", """
안녕 나는 생활/여가와 관해서 너와 대화하면서, 너의 미래를 함께 생각해볼 셀퍼야.
앞으로 3가지 질문에 대한 답을 하면서 하루하루의 소소한 생활에 대한 답을 찾아봐도 좋을 거 같아!
그러면 첫번째 질문, 하루에 꼭 하는 습관이나 매일매일 느끼는 소소한 행복이 있어? 정말 소소한 것도 괜찮아."""),
LEISURE_Q2(2, "여가", """
그러면 지금 너에게 일이나 공부 등 방해요인이 다 사라지고, 너만을 위한 1주일이 생긴다면 뭘 하고 싶어?"""),
LEISURE_Q3(3, "여가", """
그러면 마지막으로, 바쁜 일상 속에서 소소한 행복을 위해 즐기는 것들이 있으면 나에게 소개해줘."""),
HEALTH_FINAL_COMMENT(0, "건강", """
\n답변 잘 해줘서 고마워.
나랑 한 이 대화가 너의 내면을 들여다보는데 도움이 되었으면 좋겠다!
내가 답을 제시해줄 순 없겠지만 내가 던진 질문을 토대로 너에 대해 생각하면서 너의 가치를 정의해가길 바랄게.
그러면 다음 [커리어 셀퍼]와 함께 대화하면서 나를 조금 더 알아보는게 어때?"""),
CAREER_FINAL_COMMENT(0, "커리어", """
\n너가 답변해준 걸 토대로 '가치'를 생각하면서 앞으로의 커리어패스를 설계해보면 좋을 거 같아!
물질이나 직업 등 수단을 중심으로 미래를 찾아보는 것도 좋지만, 보다 근본적으로 나의 가치를 생각하면서 미래를 생각해보길 바래.
다음은 조금 더 너의 감정에 집중할 수 있는 [사랑 셀퍼]와의 대화를 통해 너를 더 알아보렴!"""),
LOVE_FINAL_COMMENT(0, "사랑", """
\n답변 잘 해줘서 고마워.
나는 라이프 디자인에 기반한 챗봇이라 완벽히 맞을 수는 없지만 나랑 대화하면서 너에 대해서 조금은 잘 알아갈 수 있는 기회가 되었길 바랄게 :)
이제 마지막으로 [여가 셀퍼]와 대화해 보는 거 어때?"""),
LEISURE_FINAL_COMMENT(0, "여가", """
\n앞으로 너의 일상들이 행복할 수 있도록, 지금까지 나랑 대화한 것들을 떠올리면서 퍼스널 브랜딩을 구축해가면 좋을 거 같아.
대화는 짧았지만, 너에게 새로운 고민을 할 수 있는 기회였길 바라며 그 기회를 전문 퍼스널 브랜더와 멘토링을 받으며, 프로그램을 수강하면서 너의 스토리로 만들어가길 바랄게!""");

private int number;
private String category;
private String content;

Conversation(int number, String category, String content) {
this.number = number;
this.category = category;
this.content = content;

}

public int getNumber() {
return number;
}

public String getCategory() {
return category;
}

public String getContent() {
return content;
}
}
68 changes: 12 additions & 56 deletions src/main/java/kusitms/jangkku/domain/persona/constant/Question.java
Original file line number Diff line number Diff line change
@@ -1,62 +1,18 @@
package kusitms.jangkku.domain.persona.constant;

public enum Question {
HEALTH_Q1(1, "건강", """
안녕 나는 마음의 건강이라는 주제로 너와 대화하며, 너의 건강한 내면을 발견하고 너의 기둥을 찾을 수 있도록 도와주는 셀퍼야.
앞으로 내가 3가지 질문을 할건데, 잘 대답해봐.
그러면 첫번째 질문을 해볼게. 첫번째 질문은 가볍게 신체적 건강과 관한 내용이야.
좋아하는 운동이 있어? 그 운동이 왜 좋아?"""),
HEALTH_Q2(2, "건강", """
그럼 이제 조금 어려울 수도 있는데, 마음의 건강과 관한 질문을 해볼게.
심호흡 한 번 하고 대답해봐. 너는 평소에 더 행복하게, 건강하게 살기 위해서 남는 시간에 노력하는게 있어?"""),
HEALTH_Q3(3, "건강", """
그러면 마지막 질문!
마음이 건강하다는 건 어떤 뜻인거 같아? 너가 중요하다고 생각하는 가치(정직, 책임, 인간관계, 명예 등)를 떠올리면서 답변하면 더 좋을 거 같아."""),
CAREER_Q1(1, "커리어", """
안녕 나는 커리어와 관해서 너와 대화하면서, 너의 미래를 함께 생각해볼 커리어 셀퍼야.
앞으로 3가지 질문에 대한 답을 하면서 우리 같이 답을 찾아가보자.
그러면 첫번째 질문, 너는 어떤 미래를 그리고 있어? 꼭 직업이 아니여도 되고, 어떤 모습으로 하루하루를 살고 싶은지 말해줘.
아까 건강 셀퍼와 함께 삶의 가치에 대한 얘기를 했던 걸 떠올리면서 대답해보면 좋을 거 같아!"""),
CAREER_Q2(2, "커리어", """
삶에서 겪은 성취 중에 가장 큰 성취라면 뭐가 있을까? 혹은 아직 이루지 않은 너의 성취를 말해줘도 좋아."""),
CAREER_Q3(3, "커리어", """
그러면 그 성취와 유사한 혹은 그 성취를 이루기 위해서는 무엇을 해볼 수 있을까?"""),
LOVE_Q1(1, "사랑", """
안녕 나는 사랑이라는 주제로 너와 대화하며 , 사랑을 통해 너를 발견하고 너의 가치를 만들어가도록 도와주는 셀퍼야.
앞으로 내가 3가지 질문을 할건데, 잘 대답해줘.
너가 지금까지 살면서 가장 사랑했던 사람을 (그게 너일수도 있구) 떠올리면서 답하면 더 쉬울거야.
그럼 첫번째 질문이야.
너는 사랑에 이유가 있다고 생각해? 있다면 왜 있는지, 없다면 왜 없다고 생각하는지 말해줘!"""),
LOVE_Q2(2, "사랑", """
그러면 이어서 두번째 질문!
네 인생에서 사랑은 몇순위야? 다른 일이나 인간관계와 사랑을 비교했을때 뭐가 더 먼저라고 생각해?"""),
LOVE_Q3(3, "사랑", """
그럼 마지막 질문!
너는 사랑을 주는 걸 좋아해 아님 받는걸 좋아해?"""),
LEISURE_Q1(1, "여가", """
안녕 나는 생활/여가와 관해서 너와 대화하면서, 너의 미래를 함께 생각해볼 셀퍼야.
앞으로 3가지 질문에 대한 답을 하면서 하루하루의 소소한 생활에 대한 답을 찾아봐도 좋을 거 같아!
그러면 첫번째 질문, 하루에 꼭 하는 습관이나 매일매일 느끼는 소소한 행복이 있어? 정말 소소한 것도 괜찮아."""),
LEISURE_Q2(2, "여가", """
그러면 지금 너에게 일이나 공부 등 방해요인이 다 사라지고, 너만을 위한 1주일이 생긴다면 뭘 하고 싶어?"""),
LEISURE_Q3(3, "여가", """
그러면 마지막으로, 바쁜 일상 속에서 소소한 행복을 위해 즐기는 것들이 있으면 나에게 소개해줘."""),
HEALTH_FINAL_COMMENT(0, "건강", """
\n답변 잘 해줘서 고마워.
나랑 한 이 대화가 너의 내면을 들여다보는데 도움이 되었으면 좋겠다!
내가 답을 제시해줄 순 없겠지만 내가 던진 질문을 토대로 너에 대해 생각하면서 너의 가치를 정의해가길 바랄게.
그러면 다음 [커리어 셀퍼]와 함께 대화하면서 나를 조금 더 알아보는게 어때?"""),
CAREER_FINAL_COMMENT(0, "커리어", """
\n너가 답변해준 걸 토대로 '가치'를 생각하면서 앞으로의 커리어패스를 설계해보면 좋을 거 같아!
물질이나 직업 등 수단을 중심으로 미래를 찾아보는 것도 좋지만, 보다 근본적으로 나의 가치를 생각하면서 미래를 생각해보길 바래.
다음은 조금 더 너의 감정에 집중할 수 있는 [사랑 셀퍼]와의 대화를 통해 너를 더 알아보렴!"""),
LOVE_FINAL_COMMENT(0, "사랑", """
\n답변 잘 해줘서 고마워.
나는 라이프 디자인에 기반한 챗봇이라 완벽히 맞을 수는 없지만 나랑 대화하면서 너에 대해서 조금은 잘 알아갈 수 있는 기회가 되었길 바랄게 :)
이제 마지막으로 [여가 셀퍼]와 대화해 보는 거 어때?"""),
LEISURE_FINAL_COMMENT(0, "여가", """
\n앞으로 너의 일상들이 행복할 수 있도록, 지금까지 나랑 대화한 것들을 떠올리면서 퍼스널 브랜딩을 구축해가면 좋을 거 같아.
대화는 짧았지만, 너에게 새로운 고민을 할 수 있는 기회였길 바라며 그 기회를 전문 퍼스널 브랜더와 멘토링을 받으며, 프로그램을 수강하면서 너의 스토리로 만들어가길 바랄게!""");
HEALTH_Q1(1, "건강", "좋아하는 운동이 있어? 그 운동이 왜 좋아?"),
HEALTH_Q2(2, "건강", "너는 평소에 더 행복하게, 건강하게 살기 위해서 남는 시간에 노력하는게 있어?"),
HEALTH_Q3(3, "건강", "마음이 건강하다는 건 어떤 뜻인거 같아? 너가 중요하다고 생각하는 가치(정직, 책임, 인간관계, 명예 등)를 떠올리면서 답변하면 더 좋을 거 같아."),
CAREER_Q1(1, "커리어", "너는 어떤 미래를 그리고 있어? 꼭 직업이 아니여도 되고, 어떤 모습으로 하루하루를 살고 싶은지 말해줘."),
CAREER_Q2(2, "커리어", "삶에서 겪은 성취 중에 가장 큰 성취라면 뭐가 있을까? 혹은 아직 이루지 않은 너의 성취를 말해줘도 좋아."),
CAREER_Q3(3, "커리어", "그러면 그 성취와 유사한 혹은 그 성취를 이루기 위해서는 무엇을 해볼 수 있을까?"),
LOVE_Q1(1, "사랑", "너는 사랑에 이유가 있다고 생각해? 있다면 왜 있는지, 없다면 왜 없다고 생각하는지 말해줘!"),
LOVE_Q2(2, "사랑", "네 인생에서 사랑은 몇순위야? 다른 일이나 인간관계와 사랑을 비교했을때 뭐가 더 먼저라고 생각해?"),
LOVE_Q3(3, "사랑", "너는 사랑을 주는 걸 좋아해 아님 받는걸 좋아해?"),
LEISURE_Q1(1, "여가", "하루에 꼭 하는 습관이나 매일매일 느끼는 소소한 행복이 있어? 정말 소소한 것도 괜찮아."),
LEISURE_Q2(2, "여가", "그러면 지금 너에게 일이나 공부 등 방해요인이 다 사라지고, 너만을 위한 1주일이 생긴다면 뭘 하고 싶어?"),
LEISURE_Q3(3, "여가", "마지막으로, 바쁜 일상 속에서 소소한 행복을 위해 즐기는 것들이 있으면 나에게 소개해줘.");

private int number;
private String category;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,23 @@ public class DiscoverPersonaChatting extends BaseEntity {
@Column(name = "question_number", nullable = false)
private int questionNumber;

@Column(name = "answer")
@Column(name = "question", columnDefinition = "TEXT")
private String question;

@Column(name = "answer", columnDefinition = "TEXT")
private String answer;

@Column(name = "reaction")
@Column(name = "reaction", columnDefinition = "TEXT")
private String reaction;

@Column(name = "summary")
@Column(name = "summary", columnDefinition = "TEXT")
private String summary;

@Builder
public DiscoverPersonaChatting(DiscoverPersona discoverPersona, int questionNumber, String answer, String reaction, String summary) {
public DiscoverPersonaChatting(DiscoverPersona discoverPersona, int questionNumber, String question, String answer, String reaction, String summary) {
this.discoverPersona = discoverPersona;
this.questionNumber = questionNumber;
this.question = question;
this.answer = answer;
this.reaction = reaction;
this.summary = summary;
Expand Down
Loading

0 comments on commit 0e81e84

Please sign in to comment.