Skip to content

Commit

Permalink
[FEAT] 바코드에서 조회한 책 DB 존재 여부 판단 로직 구현
Browse files Browse the repository at this point in the history
  • Loading branch information
bbabbi committed Dec 26, 2024
1 parent 154ca35 commit 7fbb5ee
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -39,7 +42,27 @@ public ResponseEntity<?> extractBarcode(@RequestParam("file") MultipartFile file
// 임시 파일 삭제
tempFile.delete();

return ResponseEntity.ok(bookInfo);
// DB에서 책 존재 여부 확인
Optional<Book> 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");
Expand Down
Original file line number Diff line number Diff line change
@@ -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; // 존재하지 않는 경우에만 반환
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface BookRepository extends JpaRepository<Book, Long> {
Expand Down Expand Up @@ -42,5 +43,7 @@ public interface BookRepository extends JpaRepository<Book, Long> {
@Query("SELECT b FROM Book b JOIN Bookmark bm ON b.bookId = bm.book.bookId WHERE bm.member.memberId = :memberId")
Page<Book> findBooksByMember(@Param("memberId") Long memberId, Pageable pageable);

Optional<Book> findByTitleAndPublisher(String title, String publisher);


}
9 changes: 9 additions & 0 deletions src/main/java/org/vsa/server/book/service/BarcodeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
// 이미지 파일 읽기
Expand All @@ -40,4 +45,8 @@ public String extractISBN(String imagePath) {
throw new RuntimeException("바코드 인식 실패: " + e.getMessage(), e);
}
}

public Optional<Book> findByTitleAndPublisher(String title, String publisher) {
return bookRepository.findByTitleAndPublisher(title, publisher);
}
}

0 comments on commit 7fbb5ee

Please # to comment.