728x90



- 현재 대여 중인 책이 몇 권인지 보여준다.
- 분야별로 도서관에 등록되어 있는 책이 각각 몇 권인지 보여준다.
- count가 0이면, 반환 리스트에 존재하지 않아도 된다
현재 대여 중인 책의 권수 API
Controller
@GetMapping("/book/loan")
fun countLoanedBook(): Int{
return bookService.countLoanedBook()
}
- 현재 대여 중인 책의 권수를 반환하는 API이다.
- 현재 대여 중인 책의 권수를 반환한다.
Service
@Transactional(readOnly = true)
fun countLoanedBook(): Int {
return userLoanHistoryRepository.findByStatus(UserLoanStatus.LOANED).size
}
- UserLoanStatus 가 LOANED인 상태인 List를 가지고와 사이즈를 반환한다.
Repository
interface UserLoanHistoryRepository : JpaRepository<UserLoanHistory, Long> {
//...
fun findByStatus(status: UserLoanStatus): List<UserLoanHistory>
}
- UserLoanStatus 가 LOANED인 상태인 List를 반환한다
분야별로 등록되어 있는 책의 권수 API
Controller
@GetMapping("/book/stat")
fun getBookStatistics(): List<BookStatResponse>{
return bookService.getBookStatistics()
}
- 분야별로 등록되어 있는 책의 권수를 반환하는 API이다.
- 분야별로 등록되어 있는 책의 타입, 책의 권수(타입의 값이 없으면 0)를 반환한다
BookStatResponse
data class BookStatResponse(
val type: BookType,
var count: Int,
) {
fun plusOne() {
count++
}
}
- BookType과 Count를 가지는 BookStatResponse
- type이 존재할 때 호출되는 plusOne() 함수도 있다(Count 값을 증가시켜준다)
Service
@Transactional(readOnly = true)
fun getBookStatistics(): List<BookStatResponse> {
val results = mutableListOf<BookStatResponse>()
val books = bookRepository.findAll()
for (book in books) {
/*
val targetDto = results.firstOrNull { dto -> book.type == dto.type }
if (targetDto == null) {
results.add(BookStatResponse(book.type, 1))
}else{
targetDto.plusOne()
}
*/
results.firstOrNull { dto -> book.type == dto.type }?.plusOne()
?: results.add(BookStatResponse(book.type, 1))
}
return results
}
- books에는 모든 책 정보를 조회한다.
- 만약 책 type이 존재한다면 dto의 plusOne 함수를 호출해 해당 Count 값을 증가시킨다.
- 존재하지 않는다면, dto의 BookStatReponse 타입을 생성해 주고, Count에 1을 저장한다
- 엘비스 연산자와 null처리 연산자를 사용하면 좀 더 간결하게 코드를 작성할 수 있다
728x90
'실전! 코틀린과 스프링 부트로 도서관리 애플리케이션 개발하기' 카테고리의 다른 글
| Ch04. 요구사항 추가(책 통계, QueryDSL) - 애플리케이션 대신 DB로 기능 구현 (0) | 2022.11.08 |
|---|---|
| Ch04. 요구사항 추가(책 통계, QueryDSL) - 책 통계 테스트 코드와 리펙토링 (0) | 2022.11.07 |
| Ch03. 요구사항 추가(type, 대출현황) - N+1 문제와 SQL 조인을 통한 문제 해결(fetch join) (0) | 2022.11.06 |
| Ch03. 요구사항 추가(type, 대출현황) - 유저 대출 현황 - 테스트 코드 작성 (0) | 2022.11.06 |
| Ch03. 요구사항 추가(type, 대출현황) - 도서 대출 현황 요구사항 추가 (0) | 2022.11.06 |