개발 기록/도서관 관리 시스템

[Library Management System] 25.08.31 (33일)

dev.jelee 2025. 8. 31. 19:01

[ 작업한 내용 ]

1. 사용자 도서 상세 조회

1-1) UserBookDetailResDTO

- 사용자가 도서 상세보기를 요청했을 때 응답받을 데이터.

- id, title, isbn, author, publisher, publishedDate, status, location, description 필드를 가짐.


1-2) UserBookController

- GET 방식으로 {bookId}를 @PathVariable로 도서의 상세 데이터를 요청한다.

- 서비스로직으로 bookId를 전달하여 도서 상세 데이터를 UserBookDetailResDTO 타입의 responseDTO에 저장.

- 클라이언트에게 bookId로 DB에서 조회하여 가져온 데이터를 반환해준다.


1-3) UserBookService

- 레포지터에 .findById() 메서드를 사용하여 bookId로 DB에서 데이터를 조회한 뒤 Book타입의 book 변수에 데이터 저장하고, 데이터가 없으면 커스텀한 BOOK_NOT_FOUND 예외를 발생.

- 데이터를 성공적으로 가져오면 가져온 book 데이터를 UserBookDetailResDTO 객체로 새로 생성하여 controller 계층으로 반환.


2. 사용자 타입별 키워드 검색

2-1) UserBookSearchResDTO

- 사용자가 타입별 키워드 검색을 요청했을 때 응답받을 데이터.

- id, title, isbn, author, publisher, publishedDate, status, location 필드를 가짐


2-2) UserBookController

- GET 방식으로 /api/v1/books/search 로 RequestParam형태로 type, keyword, page, size 로 데이터를 요청한다.

- 서비스로직으로 type, keyword, page, size를 전달하여 해당 타입으로 키워드가 있는 데이터를 찾아서 페이징으로 데이터를 받는다. 반환 받은 데이터 Page<UserBookSearchResDTO> 타입의 responseDTO 변수에 저장.

- 데이터를 성공적으로 가져오면 가져온 데이터 responseDTO를 반환.


2-3) UserBookService

- controller로 전달받은 데이터를 Pageable을 사용하여 페이징 준비를 한다.

- 타입이 잘못 전달되었을 경우를 대비하여 try-catch문을 사용하여 타입 예외처리를 해준다.

- 결과 담을 변수를 Page<Book> 타입으로 result 변수를 생성.

- switch문을 사용하여 type에 따라 ALL, TITLE, AUTHOR 해당하는 case를 실행한다.

- 각 case에는 레포지토리로 keyword와 pageable을 전달하여 DB에서 가져온 데이터를 result에 저장한다.

- result가 비어있는 경우를 대비하여 예외처리를 해준다.

- 가져온 데이터는 List 타입으로 형변환 시켜준 뒤 반환할 때에는 Page 형태로 변환하여 반환.


3. 사용자 전체목록조회 기능 수정

- UserBookListResDTO에서 status 필드 추가. (도서 상태)\


commit
사용자 도서 타입별 키워드 검색(좌), 사용자 도서 상세조회(우)