Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 24 additions & 14 deletions src/main/java/book/book/book/entity/Book.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,25 @@
package book.book.book.entity;

import book.book.common.BaseTimeEntity;
import book.book.common.CustomException;
import book.book.common.ErrorCode;
import book.book.quiz.domain.QuizStatus;
import jakarta.persistence.*;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.EnumType;
import jakarta.persistence.Enumerated;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.Lob;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import java.time.LocalDate;

import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
* ISBN (유일값) 기준으로 책을 찾습니다
Expand Down Expand Up @@ -46,7 +57,7 @@ public class Book extends BaseTimeEntity {
private BookCategory category;

@Builder.Default
private Integer chapterCount=0;
private Integer chapterCount = 0;
@Builder.Default
private Integer diaryCount = 0;

Expand All @@ -73,6 +84,11 @@ public void updateQuizStatus(QuizStatus quizStatus) {
this.quizStatus = quizStatus;
}

public void completeQuizGeneration(int newQuizCount) {
this.generatedQuizCount = newQuizCount;
this.quizStatus = QuizStatus.COMPLETED;
}

public void updateGeneratedQuizCount(int count) {
this.generatedQuizCount = count;
}
Expand All @@ -83,7 +99,7 @@ public void updateRating(Float aladinStarRating) {

/**
* 알라딘 별점(10점 만점)을 5점 만점으로 변환하여 저장합니다.
*
*
* @param aladinRating 알라딘 별점 (0.0 ~ 10.0)
*/
public void updateRatingFromAladin(Float aladinRating) {
Expand Down Expand Up @@ -124,12 +140,6 @@ public void updateChapterCount(Integer chapterCount) {
this.chapterCount = chapterCount;
}

public void validateHasChapter() {
if(this.chapterCount == null || this.chapterCount <= 0) {
throw new CustomException(ErrorCode.NO_HAS_CHAPTER);
}
}

public void plusDiaryCount() {
this.diaryCount++;
}
Expand Down
20 changes: 20 additions & 0 deletions src/main/java/book/book/common/CustomObjectMapper.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package book.book.common;

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class CustomObjectMapper {

private final ObjectMapper objectMapper;

public <T> T readValue(String content, Class<T> valueType) {
try {
return objectMapper.readValue(content, valueType);
} catch (Exception e) {
throw new CustomException(ErrorCode.QUIZ_GENERATION_FAILED, e);
}
}
}
3 changes: 1 addition & 2 deletions src/main/java/book/book/quiz/api/QuizAdminController.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ public class QuizAdminController {
private final QuizAdminService quizAdminService;
private final QuizGenerationService quizGenerationService;

@Operation(summary = "책의 모든 챕터 퀴즈 일괄 생성(어드민 용)",
description = "퀴즈 생성 요청을 접수하고 즉시 응답합니다. 실제 퀴즈는 백그라운드에서 생성됩니다.")
@Operation(summary = "책의 모든 챕터 퀴즈 일괄 생성", description = "퀴즈 생성 요청을 접수하고 즉시 응답합니다. 실제 퀴즈는 백그라운드에서 생성됩니다.")
@PostMapping("/books/{bookId}/quizzes/generate-all")
public ResponseForm<QuizGenerationAcceptedResponse> generateAllChapterQuizzes(
@PathVariable Long bookId,
Expand Down
17 changes: 17 additions & 0 deletions src/main/java/book/book/quiz/dto/external/GeminiRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package book.book.quiz.dto.external;

import com.google.genai.types.Content;
import com.google.genai.types.Schema;
import lombok.Builder;
import lombok.Getter;

@Getter
@Builder
public class GeminiRequest<T> {
private final String prompt;
private final Content systemInstruction;
private final Schema schema;
private final float temperature;
private final Class<T> responseType;
private final String contextForLogging;
}
174 changes: 0 additions & 174 deletions src/main/java/book/book/quiz/external/GeminiClientManager.java

This file was deleted.

Loading
Loading