[ 작업한 내용 ]
< 사용자: 내 도서 대출 내역 >
# UserLoanListResDTO
- 내 도서 대출 내역 응답 DTO
- 도서 대출 고유번호, 책 제목, 저자, 출판사, 출판일, 대출일, 반납일
- Loan 엔티티를 파라미터로 받는 생성자 함수 정의
** 변경사항 없음
@Getter
public class UserLoanListResDTO {
private Long id;
private String bookTitle;
private String author;
private String publisher;
private LocalDate publishedDate;
private LocalDateTime loanDate;
private LocalDateTime returnDate;
public UserLoanListResDTO(Loan loan) {
this.id = loan.getId();
this.bookTitle = loan.getBook().getTitle();
this.author = loan.getBook().getAuthor();
this.publisher = loan.getBook().getPublisher();
this.publishedDate = loan.getBook().getPublishedDate();
this.loanDate = loan.getLoanDate();
this.returnDate = loan.getReturnDate();
}
}
# AdminBookController
- GET /api/v1/user/me/loans 로 요청.
- 파라미터로 page, size, @AuthenticationPrincipal User user 전달받음.
- Service 계층으로 page, size, user.getId()를 전달함.
- 결과는 PageResponse<UserLoanListResDTO> 형태로 저장.
- 클라이언트 측으로 성공메시지와 결과를 ApiResponse.success()로 감싸서 응답.
** PageResponse로 타입 변경, 주석과 파라미터 변경
@GetMapping("/loans")
public ResponseEntity<?> userLoanList(
@RequestParam(value = "page", defaultValue = "0") int page,
@RequestParam(value = "size", defaultValue = "10") int size,
@AuthenticationPrincipal User user) {
// 서비스로직
PageResponse<UserLoanListResDTO> responseDTO = userLoanService.userLoanList(page, size, user.getId());
// 성공메시지
String message = messageProvider.getMessage(LoanSuccessCode.LOAN_LIST_FETCHED.getMessage());
// 응답
return ResponseEntity
.status(LoanSuccessCode.LOAN_LIST_FETCHED.getHttpStatus())
.body(ApiResponse.success(
LoanSuccessCode.LOAN_LIST_FETCHED,
message,
responseDTO));
}
# AdminBookService
- userRepository.findById(userId) 사용하여 사용자 조회 후 User로 저장. 만약에 조회가 안된다면 UserErrorCode.USER_NOT_FOUND 예외를 발생 시킴.
- PageRerquest.of(page, size)를 사용하여 페이징 정의 후 Pageable로 저장.
- loanRepository.findByUser_Id(user.getId(), pageable)를 사용하여 사용자 본인의 도서 대출 내역을 조회하여 페이징 처리한 데이터를 Page<Loan> result로 저장.
- Page<UserLoanListResDTO>로 맵핑하여 pageDTO에 저장.
- Controller에 pageDTO를 기반으로 PageResponse로 생성하여 반환.
** PageResponse로 변경
public PageResponse<UserLoanListResDTO> userLoanList(int page, int size, Long userId) {
// 사용자 조회 및 예외 처리
User user = userRepository.findById(userId)
.orElseThrow(() -> new BaseException(UserErrorCode.USER_NOT_FOUND));
// 페이징 정의
Pageable pageable = PageRequest.of(page, size);
// DB에서 사용자id로 조회
Page<Loan> result = loanRepository.findByUser_Id(user.getId(), pageable);
// Page<Loan> -> Page<UserLoanListResDTO>로 맵핑
Page<UserLoanListResDTO> pageDTO = result.map(UserLoanListResDTO::new);
// 반환
return new PageResponse<>(pageDTO);
}
< 사용자: 책 리뷰 작성 >
# 수정 내용
- 주석 내용만 변경