💡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
반응형