[ 작업한 내용 ]
< 도서 대출 조건별 검색 기능 추가 >
1. messages.properties
- 도서 대출 타입별 키워드 검색 성공/에러 메시지 정의.
success.loan.fetched=도서 대출 조회가 완료되었습니다.
error.loan.search.type=유효하지 않은 검색 타입입니다.
2. LoanSuccessCode
- 도서 타입별 키워드 검색 성공 코드 정의.
LOAN_FETCHED(HttpStatus.OK, "LOAN_207", "success.loan.fetched");
3. LoanErrorCode
- 도서 타입별 키워드 검색 에러 코드 정의.
LOAN_SEARCH_TYPE_FAILED(HttpStatus.BAD_REQUEST, "LOAN_409", "error.loan.search.type");
4. AdminLoanSearchResDTO
- 도서 타입별 키워드 검색 응답 DTO 정의.
- id, user, book, loanDate, dueDate, returnDate, extended, status 필드
- Loan 엔티티를 파라미터로 받는 생성자 함수 정의.
5. LoanSearchType - enum
- BOOKTITLE, USERID
6. AdminLoanController
- GET 방식으로 /api/v1/admin/loans/search uri로 요청을 한다.
- 요청 데이터는 type, keyword, status, page, size가 있고 RequestParam형태로 요청한다.
- Service로 type, keyword, status, page, size를 전달하여 비즈니스 로직을 처리하고 결과를 Page<AdminLoanSearchResDTO> 형태로 저장한다.
- 클라이언트 측으로 반환할 응답 데이터는 ApiResponse형태로 성공 메시지와 응답 DTO를 반환한다.
7. AdminLoanService
- Pageable을 사용하여 요청받은 page, size 값을 대입하여 페이징 정의를 한다.
- 요청받은 type이 올바른 값인지 type 예외 처리를한다.
- switch문을 사용하여 type 값이 BOOKTITLE, USERID인지 case를 구분하여 각 코드블럭을 실행한다.
- 코드블럭에는 status가 null인지 아닌지 삼항연산자를 사용하여 처리하였고, 도서명/사용자 아이디 + 상태로 조회 또는 도서명/사용자 아이디만으로 조회가 가능한 메서드를 호출하여 요청 데이터를 처리하였다.
- Page 형태로 받은 결과를 List 형태로 변환하였고, Controller로 반환할 때에는 PageImpl로 감싸서 List dto를 반환하였다.
8. LoanRepository
- 타입별 조건 검색에 대한 인터페이스를 정의한다.
// 검색 기능: 도서명 + 대출 상태
Page<Loan> findByBook_TitleContainingIgnoreCaseAndStatus(String bookTitle, LoanStatus status, Pageable pageable);
// 검색 기능: 도서명만
Page<Loan> findByBook_TitleContainingIgnoreCase(String bookTitle, Pageable pageable);
// 검색 기능: 사용자명 + 대출상태
Page<Loan> findByUser_UsernameContainingIgnoreCaseAndStatus(String username, LoanStatus status, Pageable pageable);
// 검색 기능: 사용자명만
Page<Loan> findByUser_UsernameContainingIgnoreCase(String username, Pageable pageable);
'개발 기록 > 도서관 관리 시스템' 카테고리의 다른 글
[Library Management System] 25.09.11 (44일) (0) | 2025.09.11 |
---|---|
[Library Management System] 25.09.10 (43일) (0) | 2025.09.10 |
[Library Management System] 25.09.08 (41일) (0) | 2025.09.08 |
[Library Management System] 25.09.07 (40일) (0) | 2025.09.07 |
[Library Management System] 25.09.06 (39일) (0) | 2025.09.06 |