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

[BLOOM-040] 온보딩 api 개발 #110

Merged
merged 11 commits into from
Sep 16, 2024
Merged

[BLOOM-040] 온보딩 api 개발 #110

merged 11 commits into from
Sep 16, 2024

Conversation

Dompoo
Copy link
Collaborator

@Dompoo Dompoo commented Sep 12, 2024

How

  • 질문과 응답이 있을 때, 이를 통해서 어떻게 여러 결과중 하나를 선택할지 고민을 많이 했습니다.
  • 아직은 가중치 등 복잡한 결과 산정 로직이 필요없다고 생각하여, 간단하게 구현하였습니다.
    • 하나의 응답이 하나의 결과에 연결됩니다.
    • 사용자가 제출한 응답지의 여러 응답들에 따라 각 연결된 결과를 쿼리합니다.
    • 그렇게 쿼리해온 여러 결과중 가장 많이 선택된 결과를 반환합니다.

Result

  • 온보딩 질문지 조회 api를 개발했습니다.
  • 온보딩 응답 제출 api를 개발했습니다.

@Dompoo Dompoo added the 🌱 feat Suggest a new feature or enhancement label Sep 12, 2024
@Dompoo Dompoo self-assigned this Sep 12, 2024
Copy link
Member

@stophwan stophwan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다!! 예시가 있으면 더 잘 읽힐 것 같아요...!
각 문항에 응답들 당 하나의 결과가 있는건가요??

@Dompoo
Copy link
Collaborator Author

Dompoo commented Sep 12, 2024

고생하셨습니다!! 예시가 있으면 더 잘 읽힐 것 같아요...! 각 문항에 응답들 당 하나의 결과가 있는건가요??

응답들 당 하나의 결과가 매칭이 되고, 그 응답이 선택되면 그 결과가 선택될 확률이 높아지는거죠!
지금 하나의 응답이 여러개의 응답을 가리키지 못해서 수정에 들어가야 하는데, 일단 수정 후 결과만 말씀드리면

결과1, 2, 3이 있을 때,

  • 질문 1 : 어디에 기르고 싶나요?
    • 응답 1 : 집! -> 결과 1, 결과 2
    • 응답 2 : 밖! -> 결과 3
  • 질문 2 : 식물의 매력 포인트는?
    • 응답 1 : 잎! -> 결과 1, 결과 3
    • 응답 2 : 꽃! -> 결과 2

요런식으로 질문-응답이 짜일 수 있고 만약 제가 질문1-응답1, 질문2-응답1을 했다면
각 결과의 포인트가

  • 결과 1 : 2점
  • 결과 2 : 1점
  • 결과 3 : 1점

요런식으로 계산되어서 결과1이 반환되는 방식입니다!

Copy link
Member

@stophwan stophwan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이제 OnboardingAnswer가 특정 질문에 대한 B 응답을 했을때 결과가 "몬스테라, 선인장"이면 행이 두개가 있는거죠? 제가 이해한 내용이 맞나요...?

Comment on lines 39 to 42
return resultSet
.maxByOrNull { result ->
frequencyMap.getOrDefault(result, 0)
} ?: throw NoSuchElementException("No result found in the resultSet")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이부분은 어떤 상황에서의 에러인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resultSet에서 frequencyMap 기준으로 최대 선택 Result를 찾게 되는데, 일치하는게 하나도 없는 경우에 터지는 예외입니다! 보통 resultSet이나 selectedResult를 이상하게 제공했을 경우에 발생해요.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

그럼 따로 Exception을 만들어서 클라이언트에게 반환하는건 어떨까요? 현재 ExceptionHandler에 NosuchElementException이나 IlegalArgumentException 같이 기본 예외가 아닌 커스텀 예외처리가 되어있으니까요

Comment on lines 24 to 37
private fun inResultPairs(
qOnboardingAnswer: QOnboardingAnswer,
resultPairs: List<Pair<Int, Int>>,
): BooleanExpression? {
val conditions: List<BooleanExpression> =
resultPairs.map { (questionNumber, answerNumber) ->
qOnboardingAnswer.onboardingQuestion.questionNumber.eq(questionNumber)
.and(qOnboardingAnswer.answerNumber.eq(answerNumber))
}
return if (conditions.isNotEmpty()) {
Expressions.allOf(*conditions.toTypedArray())
} else {
null
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

null을 반환하는 경우는 어떤 경우인가요?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

resultPairs가 비어있는 경우입니다!

@Dompoo
Copy link
Collaborator Author

Dompoo commented Sep 14, 2024

이제 OnboardingAnswer가 특정 질문에 대한 B 응답을 했을때 결과가 "몬스테라, 선인장"이면 행이 두개가 있는거죠? 제가 이해한 내용이 맞나요...?

네 맞습니다!

@Dompoo Dompoo linked an issue Sep 15, 2024 that may be closed by this pull request
Copy link
Member

@stophwan stophwan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 고생하셨습니다!

@Dompoo Dompoo merged commit c1d7cbd into main Sep 16, 2024
1 check passed
@stophwan stophwan deleted the feat/onboard branch September 16, 2024 14:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌱 feat Suggest a new feature or enhancement
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feat] 온보딩 api 개발
2 participants