본문 바로가기
프로젝트

기존 DB 테이블에 id 저장하기 (토큰으로 받아오기)

by 개발자신입 2024. 5. 20.
반응형

DB에 id 저장

memberId 받아와서 db에 저장하기
token으로 받아와야 함.

    @PostMapping("/submitTest")
    public ResponseEntity<ResultData> submitTest(@RequestBody ResultData resultData, 
            @CookieValue(value = "token", required = false) String token) {

        System.out.println(resultData + "토큰 submit test");

TestResult (entity)

해당 테이블에 memberId 컬럼을 만들어줌

    @Column(name = "member_id")
    @Comment("회원 ID")
    private int memberId;

컨트롤러

@CookieValue를 사용해서 토큰을 받아온다. 받아지는지 출력문으로 확인 필수!

int memberId = jwtService.getId(token);

    @PostMapping("/submitTest")
    public ResponseEntity<ResultData> submitTest(@RequestBody ResultData resultData, 
            @CookieValue(value = "token", required = false) String token) {

        System.out.println(resultData + "토큰 submit test");
        System.out.println(token+"토큰입니다");

         // 토큰값이 유효하지 않으면
        if (!jwtService.isValid(token)) {
            System.out.println("유효하지 않은 토큰: " + token);
            throw new ResponseStatusException(HttpStatus.UNAUTHORIZED);
        }

        // 토큰값으로부터 id 값 추출하기
        int memberId = jwtService.getId(token);
        System.out.println("추출된 memberId: " + memberId);

        List<TestResult> testResults = new ArrayList<>();
        int totalScore = 0;

        // 응답 배열 가져옴
        List<Integer> userAnswersArray = resultData.getUserAnswersArray();

        for (int i = 0; i < userAnswersArray.size(); i++) {
            Integer answer = userAnswersArray.get(i);
            if (answer != null && answer >= 1 && answer <= 3) {
                int score = calculateScore(answer);
                totalScore += score;

                TestResult testResult = new TestResult();
                testResult.setQid(i + 1);
                //testResult.setSid(1);
                testResult.setTanswer(answer);
                testResult.setMemberId(memberId);
                testResult.setTdate(LocalDateTime.now());
                testResult.setTotalScore(totalScore);
                testResults.add(testResult);
            }
        }

        // 결과 데이터 저장
        if (!testResults.isEmpty()) {
            testService.saveTestResults(testResults);
        }

        ResultData result = generateResultData(totalScore);
        return ResponseEntity.ok(result);
    }

클라이언트 코드

/submitTest의 aixos에 { withCredentials: true } 값을 넣어서 같이 보내준다.

submitTest() {

      axios.post('http://localhost:3000/api/submitTest', {
        userAnswersArray: userAnswersArray,
        totalScore: userAnswersArray.reduce((acc, cur) => acc + cur, 0)}, 
        { withCredentials: true }) // id값 받아오게?

        .then(response => {
          console.log('성공적으로 제출됨:', response.data);
          const { totalScore, recommendedJobs, personalTraits } = response.data;

          this.result.totalScore = totalScore;
          this.result.recommendedJobs = recommendedJobs;
          this.result.personalTraits = personalTraits;

          this.$router.push({ name: 'ResultPage', query: { userAnswers: JSON.stringify(userAnswersArray) } });
        })
        .catch(error => {
          console.error('Error submitting test:', error);
        });
    }

 

 

-> member_id 받아와진다.

 

반응형

댓글