Skip to content

Commit aa6b702

Browse files
committed
[EA3-143] feature: 퀴즈 요청 시점에 해당 게시글에 이미 퀴즈가 존재한다면 생성하지 않고 조회하는 로직 추가
1 parent fc5a457 commit aa6b702

File tree

8 files changed

+57
-16
lines changed

8 files changed

+57
-16
lines changed

src/main/java/grep/neogul_coder/domain/prtemplate/service/LinkService.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,17 @@
33
import grep.neogul_coder.domain.prtemplate.controller.dto.request.LinkUpdateRequest;
44
import grep.neogul_coder.domain.prtemplate.entity.Link;
55
import grep.neogul_coder.domain.prtemplate.repository.LinkRepository;
6-
import grep.neogul_coder.domain.prtemplate.repository.PrTemplateRepository;
76
import jakarta.transaction.Transactional;
8-
import java.util.Map;
9-
import java.util.Optional;
10-
import java.util.Set;
11-
import java.util.stream.Collectors;
7+
import java.util.List;
128
import lombok.RequiredArgsConstructor;
139
import org.springframework.stereotype.Service;
1410

15-
import java.util.List;
16-
1711
@Service
1812
@RequiredArgsConstructor
1913
@Transactional
2014
public class LinkService {
2115

2216
private final LinkRepository linkRepository;
23-
private final PrTemplateRepository prTemplateRepository;
2417

2518
public void deleteByUserId(Long userId) {
2619
List<Link> links = linkRepository.findAllByUserId(userId);

src/main/java/grep/neogul_coder/domain/quiz/controller/AiQuizController.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package grep.neogul_coder.domain.quiz.controller;
22

33
import grep.neogul_coder.domain.quiz.controller.dto.response.QuizResponse;
4+
import grep.neogul_coder.domain.quiz.entity.Quiz;
45
import grep.neogul_coder.domain.quiz.exception.PostNotFreeException;
56
import grep.neogul_coder.domain.quiz.exception.code.QuizErrorCode;
7+
import grep.neogul_coder.domain.quiz.repository.AiQuizRepository;
68
import grep.neogul_coder.domain.quiz.service.AiQuizServiceImpl;
79
import grep.neogul_coder.domain.studypost.Category;
810
import grep.neogul_coder.domain.studypost.StudyPost;
911
import grep.neogul_coder.domain.studypost.service.StudyPostService;
1012
import grep.neogul_coder.global.response.ApiResponse;
13+
import java.util.Optional;
1114
import lombok.RequiredArgsConstructor;
1215
import org.springframework.web.bind.annotation.GetMapping;
1316
import org.springframework.web.bind.annotation.PathVariable;
@@ -21,16 +24,24 @@ public class AiQuizController implements AiQuizSpecification {
2124

2225
private final StudyPostService studyPostService;
2326
private final AiQuizServiceImpl aiQuizServiceImpl;
27+
private final AiQuizRepository aiQuizRepository;
2428

2529
@GetMapping("/{postId}")
2630
public ApiResponse<QuizResponse> get(@PathVariable("postId") Long postId) {
2731
StudyPost post = studyPostService.findById(postId);
28-
29-
if(!Category.FREE.equals((post.getCategory()))){
32+
if (!Category.FREE.equals((post.getCategory()))) {
3033
throw new PostNotFreeException(QuizErrorCode.POST_NOT_FREE_ERROR);
3134
}
3235

33-
QuizResponse quizResponse = aiQuizServiceImpl.createAndSaveQuiz(postId,post.getContent());
36+
Optional<Quiz> quiz = aiQuizRepository.findByPostId(postId);
37+
38+
if (quiz.isPresent()) {
39+
Quiz q = quiz.get();
40+
QuizResponse quizResponse = QuizResponse.toResponse(q.getQuizContent(), q.isQuizAnswer());
41+
return ApiResponse.success(quizResponse);
42+
}
43+
44+
QuizResponse quizResponse = aiQuizServiceImpl.createAndSaveQuiz(postId, post.getContent());
3445
return ApiResponse.success(quizResponse);
3546
}
3647

src/main/java/grep/neogul_coder/domain/quiz/controller/dto/response/QuizResponse.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package grep.neogul_coder.domain.quiz.controller.dto.response;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
4+
import lombok.Builder;
45
import lombok.Data;
56

67
@Schema(description = "퀴즈 응답 DTO")
@@ -13,4 +14,17 @@ public class QuizResponse {
1314
@Schema(description = "퀴즈 정답 여부", example = "true")
1415
private Boolean quizAnswer;
1516

17+
@Builder
18+
private QuizResponse(String quizContent, Boolean quizAnswer) {
19+
this.quizContent = quizContent;
20+
this.quizAnswer = quizAnswer;
21+
}
22+
23+
public static QuizResponse toResponse(String quizContent, Boolean quizAnswer) {
24+
return QuizResponse.builder()
25+
.quizContent(quizContent)
26+
.quizAnswer(quizAnswer)
27+
.build();
28+
}
29+
1630
}

src/main/java/grep/neogul_coder/domain/quiz/entity/Quiz.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import jakarta.persistence.Id;
88
import jakarta.validation.constraints.NotNull;
99
import lombok.Builder;
10+
import lombok.Getter;
1011

12+
@Getter
1113
@Entity
1214
public class Quiz extends BaseEntity {
1315

@@ -19,7 +21,7 @@ public class Quiz extends BaseEntity {
1921
private Long postId;
2022

2123
@NotNull
22-
private String quiz;
24+
private String quizContent;
2325

2426
@NotNull
2527
private boolean quizAnswer;
@@ -28,15 +30,15 @@ public class Quiz extends BaseEntity {
2830
protected Quiz(Long id, Long postId, String quiz, boolean quizAnswer) {
2931
this.id = id;
3032
this.postId = postId;
31-
this.quiz = quiz;
33+
this.quizContent = quiz;
3234
this.quizAnswer = quizAnswer;
3335
}
3436

3537
protected Quiz() {
3638

3739
}
3840

39-
public Quiz QuizInit(Long postId, String quiz, boolean quizAnswer){
41+
public Quiz QuizInit(Long postId, String quiz, boolean quizAnswer) {
4042
return Quiz.builder()
4143
.postId(postId)
4244
.quiz(quiz)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package grep.neogul_coder.domain.quiz.exception;
2+
3+
import grep.neogul_coder.global.exception.business.NotFoundException;
4+
import grep.neogul_coder.global.response.code.ErrorCode;
5+
6+
public class QuizNotFoundException extends NotFoundException {
7+
8+
public QuizNotFoundException(ErrorCode errorcode) {
9+
super(errorcode);
10+
}
11+
}

src/main/java/grep/neogul_coder/domain/quiz/exception/advice/QuizAdvice.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package grep.neogul_coder.domain.quiz.exception.advice;
22

33
import grep.neogul_coder.domain.quiz.exception.PostNotFreeException;
4+
import grep.neogul_coder.domain.quiz.exception.QuizNotFoundException;
45
import grep.neogul_coder.domain.quiz.exception.code.QuizErrorCode;
56
import grep.neogul_coder.global.response.ApiResponse;
67
import org.springframework.http.HttpStatus;
@@ -18,4 +19,11 @@ public ResponseEntity<ApiResponse<Void>> postNotFreeException(PostNotFreeExcepti
1819
.body(ApiResponse.errorWithoutData(QuizErrorCode.POST_NOT_FREE_ERROR));
1920
}
2021

22+
@ExceptionHandler(QuizNotFoundException.class)
23+
public ResponseEntity<ApiResponse<Void>> quizNotFreeException(PostNotFreeException e) {
24+
return ResponseEntity
25+
.status(HttpStatus.BAD_REQUEST)
26+
.body(ApiResponse.errorWithoutData(QuizErrorCode.QUIZ_NOT_FOUND));
27+
}
28+
2129
}

src/main/java/grep/neogul_coder/domain/quiz/exception/code/QuizErrorCode.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
@Getter
88
public enum QuizErrorCode implements ErrorCode {
99

10-
POST_NOT_FREE_ERROR("Q001",HttpStatus.BAD_REQUEST,"자유 게시글이 아닙니다.");
10+
POST_NOT_FREE_ERROR("Q001",HttpStatus.BAD_REQUEST,"자유 게시글이 아닙니다."),
11+
QUIZ_NOT_FOUND("Q002",HttpStatus.NOT_FOUND,"퀴즈가 없습니다.");
1112

1213
private final String code;
1314
private final HttpStatus status;
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package grep.neogul_coder.domain.quiz.repository;
22

33
import grep.neogul_coder.domain.quiz.entity.Quiz;
4+
import java.util.Optional;
45
import org.springframework.data.jpa.repository.JpaRepository;
56
import org.springframework.stereotype.Repository;
67

78
@Repository
89
public interface AiQuizRepository extends JpaRepository<Quiz, Long> {
9-
10+
Optional<Quiz> findByPostId(Long postId);
1011
}

0 commit comments

Comments
 (0)