💡My project/셸위 : 게임 친구 매칭 사이트
[셸위:게임 친구 매칭 사이트] MBTI 테스트 구현 (2) - 테스트 로직
Song hyun
2024. 9. 2. 20:37
728x90
반응형
[셸위:게임 친구 매칭 사이트] MBTI 테스트 구현 (2) - 테스트 로직
*DB
1. TestController.java
package com.example.demo.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.example.demo.repository.QuestionRepository;
import com.example.demo.repository.model.Answer;
import com.example.demo.repository.model.Mbti;
import com.example.demo.repository.model.Question;
import com.example.demo.service.MbtiService;
import com.example.demo.service.QuestionService;
import jakarta.servlet.http.HttpSession;
import lombok.RequiredArgsConstructor;
@Controller
@RequestMapping("/test")
@RequiredArgsConstructor
public class TestController {
@Autowired
private HttpSession httpSession;
@Autowired
private QuestionService questionService;
@Autowired
private MbtiService mbtiService;
private int progressNumber;
public TestController(HttpSession httpSession, QuestionService questionService){
this.httpSession = httpSession;
this.questionService = questionService;
progressNumber=1;
}
/**
* 메인 페이지 이동
* @return
*/
// http://localhost:8080/test/main
@GetMapping("/main")
public String mainPage() {
return "mainPage";
}
/**
* MBTI 테스트 페이지 이동
* @param model
* @return
*/
// http://localhost:8080/test/start-test
@GetMapping("/start-test")
public String testPage(Model model) {
List<Question> questionList = questionService.getAllQuestion();
int progressNumber = 0;
model.addAttribute("questionList", questionList);
model.addAttribute("progressNumber", progressNumber);
return "test/startTestPage";
}
/**
* MBTI 결과 페이지 송출
* @param entity
* @return
*/
// http://localhost:8080/test/show-result
@PostMapping("/show-result")
public String postMethodName(@RequestParam("answerArray") List<String> answerArray,
Model model) {
// 로깅
//answers.forEach(answer -> {
// System.out.println(" Answer: " + answer.getAnswer());
// });
int sNum=0; // 외향형
int nNum=0; // 내향형
int qNum=0; // 낭만형
int mNum=0; // 효율형
int rNum=0; // 리더형
int eNum=0; // 개인형
int tNum=0; // 즐기는 자형
int cNum=0; // 승부욕 형
// 외향-내향형 가르기
for(int i=0; i<3; i++) {
if(answerArray.get(i).contains("no")) {
sNum++;
} else if(answerArray.get(i).contains("yes")){
nNum++;
}
}
// 낭만-효율형 가르기
for(int i=3; i<6; i++) {
if(answerArray.get(i).contains("no")) {
qNum++;
} else if(answerArray.get(i).contains("yes")) {
mNum++;
}
}
// 리더-개인형 가르기
for(int i=6; i<9; i++) {
if(answerArray.get(i).contains("no")) {
eNum++;
} else if(answerArray.get(i).contains("yes")) {
rNum++;
}
}
// 즐기는 자-승부욕 형 가르기
for(int i=9; i<11; i++) {
if(answerArray.get(i).contains("no")) {
tNum++;
} else if(answerArray.get(i).contains("yes")) {
cNum++;
}
}
// 키워드 뽑기
String first = sNum>nNum ? "S" : "N";
String second = qNum>mNum ? "Q" : "M";
String third = eNum>rNum ? "E" : "R";
String fourth = tNum>eNum ? "T" : "C";
// 키워드 합치기
String result=first+second+third+fourth;
System.out.println(result);
// 키워드를 통해 결과 탐색
Mbti resultMbti = mbtiService.selectMbtiByName(result);
// 키워드를 통해 궁합 탐색
Mbti goodMatchedMbti = mbtiService.selectMbtiByCompatibility(100);
Mbti badMatchedMbti = mbtiService.selectMbtiByCompatibility(0);
// 세션에 데이터 저장
model.addAttribute("resultMbti", resultMbti);
model.addAttribute("goodMatchedMbti", goodMatchedMbti);
model.addAttribute("badMatchedMbti", badMatchedMbti);
// 페이지 리디렉션
return "/test/resultTest";
}
}
2. QuestionService.java
package com.example.demo.service;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.repository.QuestionRepository;
import com.example.demo.repository.model.Question;
@Service
public class QuestionService {
@Autowired
private QuestionRepository questionRepository;
public QuestionService() {
this.questionRepository=questionRepository;
}
public Question getQuestionById(Integer id) {
Question question = questionRepository.selectQuestionbyId(id);
return question;
}
public List<Question> getAllQuestion() {
List<Question> questionList = new ArrayList<>();
questionList=questionRepository.selectAllQuestions();
return questionList;
}
}
3. QuestionRepository
package com.example.demo.repository;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import com.example.demo.repository.model.Question;
@Mapper
public interface QuestionRepository {
// id로 질문 찾아오기
Question selectQuestionbyId(Integer id);
// 모든 질문 찾아오기
List<Question> selectAllQuestions();
}
728x90
반응형