서비스에 등록된 테스트 목록을 조회한다.
<aside> 💭
API 서버에서 받아온 List형태의 TestDTO 객체 나열
테스트 클릭 시, 테스트 요청 도메인 주소 localStorage에 저장 = 공유용
</aside>
테스트 상세 가져오기
<aside> 💭
getTest API 요청을 통해 testId 에따른 테스트 정보 가져오기
12문 4항 질문 제공
<aside> 💭
showQuestionDTO 객체를 가져온다
</aside>
1문항의 2가지의 결과 유형을 매핑한다.(1문항은 2가지의 유형을 담는 내용을 포함하고 있어야 함)
12개의 문항, 8개의 결과 유형
<aside> 💭
선택지 클릭 시 showQuestionDTO는 localStorage에 저장한다.
매 페이지마다 localStorage에서 꺼내서 사용할 것 I 값 또한 저장할 것 ? → useState를 사용하면 상관은 없다고 함.
for (int i = 1; i <= N; i++) { // N은 원하는 만큼
for (int j = (i - 1) * 4 + 1; j <= i * 4; j++) {
System.out.println("i = " + i + ", j = " + j);
}
}
{
questionId : questionId,
styleId1 : styleId1,
styleId2 : styleId2,
userCode : [localStorage에 저장한 userCode];
}
userCode Redis get식별자로 사용
</aside>
질문 제공 컴포넌트 재활용하기 때문에 마지막 질문에 도달하면 결과 출력 동작을 요청
<aside> 💭
if(i+1이 null 일 때) API 서버로 요청
</aside>
결과 산출
최종 데이터 점수 계산
동일 점수 시 맨 첫번째 결과 유형 추출 (Stream 의 max()는 동점 발생 시 가장 먼저 발견된 entry를 반환)
<aside> 💭
public int findMostSelectedStyle(Map<Integer, SelectedBox> selectedBoxesMap) {
// 스타일의 등장 횟수를 기록할 맵
Map<Integer, Integer> countMap = new HashMap<>();
// 선택된 박스들에서 style1, style2를 각각 카운트
for (SelectedBox box : 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
}
</aside>
결과 화면 제공
결과 유형 설명 이미지 로드
관련 유형 2개 로드하기
<aside> 💭
localStorage에서 testDTO 꺼내기
API 서버에서 StyleDTO객체 받아오기
userCode 불러오기
****1. styleDTO.styleImg 다운로드 2. 현재 테스트 도메인 주소 복사 할 수 있게 기능 제공 localStorage에서 꺼내오기 3. 랜덤으로 2배수의 테스트 개수 가져오기 (현재 테스트를 제외하고 , 테스트 시 2개로 하기)
</aside>