서비스 접속
https://github.com/seoseuo/tst-BE
https://github.com/seoseuo/tst-FE
<aside> 📄 테스형 산출물
</aside>
테스트 진행 시 세션 데이터 레디스를 이용하여 캐싱
public void selectChoice(int testId, SelectUtil selectUtil) {
log.info("testId: {}, selectUtil: {}", testId, selectUtil);
SelectedBox selectedBox = new SelectedBox();
selectedBox.setStyleId1(selectUtil.getStyleId1());
selectedBox.setStyleId2(selectUtil.getStyleId2());
AnswerSession answerSession = redisService.getAnswerSession(selectUtil.getUserCode());
answerSession.getSelectedBoxesMap().put(selectUtil.getQuestionId(), selectedBox);
redisService.setAnswerSession(selectUtil.getUserCode(), answerSession, 1800000);
log.info("레디스에 저장된 선택지: {}", redisService.getAnswerSession(selectUtil.getUserCode()));
}
한개의 선택지 당 2가지의 결과 유형(Style)에 매핑이 가능하므로 style1,2 구분 및 카운트
public int findMostSelectedStyle() {
// 스타일의 등장 횟수를 기록할 맵
Map<Integer, Integer> countMap = new HashMap<>();
// 선택된 박스들에서 style1, style2를 각각 카운트
for (SelectedBox box : this.selectedBoxesMap.values()) {
// style1 등장 횟수 +1
countMap.put(box.getStyleId1(), countMap.getOrDefault(box.getStyleId1(), 0) + 1);
// style2 등장 횟수 +1
countMap.put(box.getStyleId2(), countMap.getOrDefault(box.getStyleId2(), 0) + 1);
}
// 가장 많이 등장한 styleId 찾기
return countMap.entrySet().stream()
.max(Map.Entry.comparingByValue()) // 값 기준으로 최대값 찾기
.map(Map.Entry::getKey) // 그 최대값을 가진 key 반환
.orElse(0); // 아무것도 없으면 기본값 1
}