From 7fbb5ee4efd8fa768a8f695a1ce81be851872771 Mon Sep 17 00:00:00 2001 From: bbabbi Date: Fri, 27 Dec 2024 03:55:16 +0900 Subject: [PATCH] =?UTF-8?q?[FEAT]=20=EB=B0=94=EC=BD=94=EB=93=9C=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=A1=B0=ED=9A=8C=ED=95=9C=20=EC=B1=85=20DB=20?= =?UTF-8?q?=EC=A1=B4=EC=9E=AC=20=EC=97=AC=EB=B6=80=20=ED=8C=90=EB=8B=A8=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../book/controller/BarcodeController.java | 25 ++++++++++++++++++- .../response/BookInfoFromBarcodeResponse.java | 13 ++++++++++ .../book/repository/BookRepository.java | 3 +++ .../server/book/service/BarcodeService.java | 9 +++++++ 4 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/vsa/server/book/dto/response/BookInfoFromBarcodeResponse.java 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); + } }