Skip to content

Commit

Permalink
Merge pull request #15 from goormthon-Univ/develop
Browse files Browse the repository at this point in the history
quiz / logout bug fix
  • Loading branch information
chaeeun-Han authored Mar 18, 2024
2 parents 93e3d2c + 562d507 commit bf0e452
Show file tree
Hide file tree
Showing 21 changed files with 680 additions and 77 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package com.beotkkot.qtudy.controller.auth;

import com.beotkkot.qtudy.domain.user.Users;
import com.beotkkot.qtudy.dto.auth.KakaoUserInfo;
import com.beotkkot.qtudy.dto.auth.UserResponse;
import com.beotkkot.qtudy.dto.object.KakaoUserInfo;
import com.beotkkot.qtudy.dto.response.auth.AuthResponseDto;
import com.beotkkot.qtudy.dto.response.auth.GetAuthResponseDto;
import com.beotkkot.qtudy.service.auth.AuthService;
import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/auth/kakao")
@RequiredArgsConstructor
Expand All @@ -21,48 +18,39 @@ public class AuthController {

// 프론트로부터 인가 code를 받아와 카카오 서버로부터 토큰 얻기
@GetMapping("")
public ResponseEntity<Object> kakaoLogin(@RequestParam("code") String code) {
public ResponseEntity<? super GetAuthResponseDto> kakaoLogin(@RequestParam("code") String code) {

System.out.println("code = " + code);

// 1. 인가 코드를 통해 카카오 서버로부터 토큰을 얻는다
String accessToken = authService.getAccessToken(code);
if (accessToken.equals("")) {
return GetAuthResponseDto.noAuthentication();
}

// 2. 발급받은 토큰을 이용해 사용자 정보를 조회
KakaoUserInfo kakaoUserInfo = authService.getKakaoUserInfo(accessToken);

// 3. 로그인
Users user = authService.login(kakaoUserInfo);

// 4. 유저 정보 리턴
UserResponse userResponse = new UserResponse(
"SU",
"Sucess",
user.getUserId(),
user.getKakaoId(),
user.getName(),
user.getProfileImageUrl(),
accessToken
);
return ResponseEntity.status(HttpStatus.OK).body(userResponse);
if (kakaoUserInfo == null) {
return GetAuthResponseDto.noExistUser();

} else {
// 3. 로그인
Users user = authService.login(kakaoUserInfo);
// 4. 유저 정보 리턴
return GetAuthResponseDto.success(user, accessToken);
}
}

@PostMapping("/logout")
public ResponseEntity<Map<String,String>> logout(@RequestHeader("Authorization") String header) {

System.out.println("header = " + header);
public ResponseEntity<? super AuthResponseDto> logout(@RequestHeader("Authorization") String accessToken) {

String[] authHeader = header.split(" ");
// 헤더에서 토큰 추출
String accessToken = authHeader[1];
System.out.println("accessToken = " + accessToken);

// 토큰을 사용해 로그아웃 처리
authService.logout(accessToken);
ResponseEntity<? super AuthResponseDto> response = authService.logout(accessToken);

// 로그아웃 성공 메시지 반환
Map<String, String> response = new HashMap<>();
response.put("code", "SU");
response.put("message", "Success");
return ResponseEntity.ok(response);
// 로그아웃 응답 반환
return response;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.beotkkot.qtudy.controller.quiz;

import com.beotkkot.qtudy.dto.request.quiz.GenerateQuizRequestDto;
import com.beotkkot.qtudy.dto.request.quiz.GradeQuizRequestDto;
import com.beotkkot.qtudy.dto.response.quiz.GetPostQuizResponseDto;
import com.beotkkot.qtudy.dto.response.quiz.QuizGradeResponseDto;
import com.beotkkot.qtudy.service.quiz.QuizService;
import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.HttpClientErrorException;

@RequiredArgsConstructor
@RestController
@Slf4j
public class QuizController {

private final QuizService quizService;

// 퀴즈 생성 및 저장
@PostMapping("/quiz")
public ResponseEntity<?> generateQuiz(@RequestBody GenerateQuizRequestDto dto) {
try {
return ResponseEntity.ok().body(quizService.generateQuiz(dto));
} catch (HttpClientErrorException | JsonProcessingException e) {
return ResponseEntity.badRequest().body(e.getMessage());
}
}

// 태그별 퀴즈 출력
@GetMapping("/quiz/tag-quiz/{tagName}")
public ResponseEntity<? super GetPostQuizResponseDto> getTagQuiz(@PathVariable String tagName) {
ResponseEntity<? super GetPostQuizResponseDto> response = quizService.getTagQuiz(tagName);
return response;
}

// 게시글 별 퀴즈 출력
@GetMapping("/quiz/post-quiz/{postId}")
public ResponseEntity<? super GetPostQuizResponseDto> getPostQuiz(@PathVariable Long postId) {
ResponseEntity<? super GetPostQuizResponseDto> response = quizService.getPostQuiz(postId);
return response;
}

// 정답 채점
@PostMapping("/quiz/grade")
public ResponseEntity<? super QuizGradeResponseDto> gradeQuiz(@RequestBody GradeQuizRequestDto dto) {
ResponseEntity<? super QuizGradeResponseDto> response = quizService.gradeQuiz(dto);
return response;
}
}
34 changes: 34 additions & 0 deletions src/main/java/com/beotkkot/qtudy/domain/quiz/Quiz.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.beotkkot.qtudy.domain.quiz;

import jakarta.persistence.*;
import lombok.*;

@Builder
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Entity
public class Quiz {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long quizId;

@Column(nullable = false)
private Long postId;

@Column(nullable = false, columnDefinition = "TEXT")
private String tags;

@Column(nullable = false, columnDefinition = "TEXT")
private String question;

@Column(/*nullable = false,*/ columnDefinition = "TEXT")
private String answer;

@Column(/*nullable = false,*/ columnDefinition = "TEXT")
private String explanation;

@Column(nullable = false, columnDefinition = "TEXT")
private String options;
}
18 changes: 0 additions & 18 deletions src/main/java/com/beotkkot/qtudy/dto/auth/UserResponse.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.beotkkot.qtudy.dto.auth;
package com.beotkkot.qtudy.dto.object;

import lombok.AllArgsConstructor;
import lombok.Getter;
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/com/beotkkot/qtudy/dto/object/QuizDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.beotkkot.qtudy.dto.object;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class QuizDto {
private String question;
private String answer;
private List<String> options;
private String explanation;
}
41 changes: 41 additions & 0 deletions src/main/java/com/beotkkot/qtudy/dto/object/QuizGradeListItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.beotkkot.qtudy.dto.object;

import com.beotkkot.qtudy.domain.quiz.Quiz;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;

@Builder
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class QuizGradeListItem {
private Long quizId;
private List<String> tags;
private String question;
private String answer;
private boolean correct;
private int userAnswer;
private List<String> options;
private String explanation;

public static QuizGradeListItem of(Quiz quiz, boolean correct, int userAnswer) {
List<String> tags = Arrays.asList(quiz.getTags().split("\\s*,\\s*"));
List<String> options = Arrays.asList(quiz.getOptions().split("\\s*,\\s*"));

return QuizGradeListItem.builder()
.quizId(quiz.getQuizId())
.tags(tags)
.question(quiz.getQuestion())
.answer(quiz.getAnswer())
.correct(correct)
.userAnswer(userAnswer)
.options(options)
.explanation(quiz.getExplanation())
.build();
}
}
37 changes: 37 additions & 0 deletions src/main/java/com/beotkkot/qtudy/dto/object/QuizListItem.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.beotkkot.qtudy.dto.object;

import com.beotkkot.qtudy.domain.quiz.Quiz;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.List;

@Builder
@Getter
@AllArgsConstructor
@NoArgsConstructor
public class QuizListItem {
private Long quizId;
private List<String> tags;
private String question;
private String answer;
private List<String> options;
private String explanation;

public static QuizListItem of(Quiz quiz) {
List<String> tags = Arrays.asList(quiz.getTags().split("\\s*,\\s*"));
List<String> options = Arrays.asList(quiz.getOptions().split("\\s*,\\s*"));

return QuizListItem.builder()
.quizId(quiz.getQuizId())
.tags(tags)
.question(quiz.getQuestion())
.answer(quiz.getAnswer())
.options(options)
.explanation(quiz.getExplanation())
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.beotkkot.qtudy.dto.request.quiz;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class ChatMessageRequestDto {
private String role;
private String content;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.beotkkot.qtudy.dto.request.quiz;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GenerateQuizRequestDto {
private Long postId;
private String tags;
private String summary;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.beotkkot.qtudy.dto.request.quiz;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class GradeQuizRequestDto {
private List<Long> quizIdList;
private List<String> answerList;
private List<Integer> userAnswerList;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.beotkkot.qtudy.dto.request.quiz;

import com.beotkkot.qtudy.dto.object.QuizDto;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class PostQuizRequestDto {
private Long postId;
private String tags;
private QuizDto quizDto;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.beotkkot.qtudy.dto.response.auth;

import com.beotkkot.qtudy.common.ResponseCode;
import com.beotkkot.qtudy.common.ResponseMessage;
import com.beotkkot.qtudy.dto.response.ResponseDto;
import lombok.Getter;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;

@Getter
public class AuthResponseDto extends ResponseDto {
private AuthResponseDto() {
super(ResponseCode.SUCCESS, ResponseMessage.SUCCESS);
}

public static ResponseEntity<AuthResponseDto> success() {
AuthResponseDto result = new AuthResponseDto();
return ResponseEntity.status(HttpStatus.OK).body(result);
}

public static ResponseEntity<ResponseDto> notExistUser() {
ResponseDto result = new ResponseDto(ResponseCode.NOT_EXISTED_USER, ResponseMessage.NOT_EXISTED_USER);
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(result);
}

public static ResponseEntity<ResponseDto> noAuthentication() {
ResponseDto result = new ResponseDto(ResponseCode.AUTHORIZATION_FAIL, ResponseMessage.AUTHORIZATION_FAIL);
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(result);
}
}
Loading

0 comments on commit bf0e452

Please sign in to comment.