diff --git a/src/main/java/org/vsa/server/book/controller/BarcodeController.java b/src/main/java/org/vsa/server/book/controller/BarcodeController.java index a65fb1e..bf65891 100644 --- a/src/main/java/org/vsa/server/book/controller/BarcodeController.java +++ b/src/main/java/org/vsa/server/book/controller/BarcodeController.java @@ -9,11 +9,14 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; import org.vsa.server.book.dto.response.BarcodeInfoResponse; +import org.vsa.server.book.dto.response.BookInfoFromBarcodeResponse; +import org.vsa.server.book.entity.Book; import org.vsa.server.book.service.AladinService; import org.vsa.server.book.service.BarcodeService; import java.io.File; import java.io.IOException; +import java.util.Optional; @RequiredArgsConstructor @RestController @@ -39,7 +42,27 @@ public ResponseEntity extractBarcode(@RequestParam("file") MultipartFile file // 임시 파일 삭제 tempFile.delete(); - return ResponseEntity.ok(bookInfo); + // DB에서 책 존재 여부 확인 + Optional existingBook = barcodeService.findByTitleAndPublisher(bookInfo.getTitle(), bookInfo.getPublisher()); + + if (existingBook.isPresent()) { + // 책이 존재할 경우 bookId, title, publisher 반환 + Book book = existingBook.get(); + BookInfoFromBarcodeResponse response = BookInfoFromBarcodeResponse.builder() + .bookId(book.getBookId()) + .title(book.getTitle()) + .publisher(book.getPublisher()) + .build(); + return ResponseEntity.ok(response); + } else { + // 책이 존재하지 않을 경우 title, publisher, 메시지 반환 + BookInfoFromBarcodeResponse response = BookInfoFromBarcodeResponse.builder() + .title(bookInfo.getTitle()) + .publisher(bookInfo.getPublisher()) + .message("해당 도서는 데이터베이스에 존재하지 않습니다.") + .build(); + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(response); + } } catch (IOException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) .body("Error processing the uploaded file"); diff --git a/src/main/java/org/vsa/server/book/dto/response/BookInfoFromBarcodeResponse.java b/src/main/java/org/vsa/server/book/dto/response/BookInfoFromBarcodeResponse.java new file mode 100644 index 0000000..8a9fc5d --- /dev/null +++ b/src/main/java/org/vsa/server/book/dto/response/BookInfoFromBarcodeResponse.java @@ -0,0 +1,13 @@ +package org.vsa.server.book.dto.response; + +import lombok.Builder; +import lombok.Getter; + +@Builder +@Getter +public class BookInfoFromBarcodeResponse { + private Long bookId; // 존재하는 경우에만 반환 + private String title; + private String publisher; + private String message; // 존재하지 않는 경우에만 반환 +} diff --git a/src/main/java/org/vsa/server/book/repository/BookRepository.java b/src/main/java/org/vsa/server/book/repository/BookRepository.java index a7a426f..c2d0a05 100644 --- a/src/main/java/org/vsa/server/book/repository/BookRepository.java +++ b/src/main/java/org/vsa/server/book/repository/BookRepository.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Repository; import java.util.List; +import java.util.Optional; @Repository public interface BookRepository extends JpaRepository { @@ -42,5 +43,7 @@ public interface BookRepository extends JpaRepository { @Query("SELECT b FROM Book b JOIN Bookmark bm ON b.bookId = bm.book.bookId WHERE bm.member.memberId = :memberId") Page findBooksByMember(@Param("memberId") Long memberId, Pageable pageable); + Optional findByTitleAndPublisher(String title, String publisher); + } diff --git a/src/main/java/org/vsa/server/book/service/BarcodeService.java b/src/main/java/org/vsa/server/book/service/BarcodeService.java index c16dbe2..cf9a2fa 100644 --- a/src/main/java/org/vsa/server/book/service/BarcodeService.java +++ b/src/main/java/org/vsa/server/book/service/BarcodeService.java @@ -5,17 +5,22 @@ import com.google.zxing.common.HybridBinarizer; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import org.vsa.server.book.entity.Book; +import org.vsa.server.book.repository.BookRepository; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; +import java.util.Optional; @Service @RequiredArgsConstructor public class BarcodeService { + private final BookRepository bookRepository; + public String extractISBN(String imagePath) { try { // 이미지 파일 읽기 @@ -40,4 +45,8 @@ public String extractISBN(String imagePath) { throw new RuntimeException("바코드 인식 실패: " + e.getMessage(), e); } } + + public Optional findByTitleAndPublisher(String title, String publisher) { + return bookRepository.findByTitleAndPublisher(title, publisher); + } }