Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[refactor] : 답변 요약 내역 반환 시, 질문도 포함하도록 변경 #88

Merged
merged 4 commits into from
Jun 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading