Skip to content

Commit 5fa446c

Browse files
authored
refactor: 기본정렬과 동적정렬 UPDATE시간으로도 가능하도록 수정 , 감상평 Optional (#126)
* refactor: apis - 감상평을 optional로 수정합니다(#125) * refactor: apis - 기본정렬과 동적정렬 UPDATE시간으로도 가능하도록 수정 (#125) * [BOOK-377] fix: apis,domain,infra - 감상평 Optional로 수정 및 valid메소드 수정(#126) * [BOOK-377] chore: infra - flyway make_review_colum (#126)
1 parent ec11ea2 commit 5fa446c

File tree

13 files changed

+41
-35
lines changed

13 files changed

+41
-35
lines changed

apis/src/main/kotlin/org/yapp/apis/book/controller/BookControllerApi.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,11 @@ interface BookControllerApi {
158158
@RequestParam(required = false) @Parameter(description = "책 상태 필터") status: BookStatus?,
159159
@RequestParam(required = false) @Parameter(description = "정렬 방식") sort: UserBookSortType?,
160160
@RequestParam(required = false) @Parameter(description = "책 제목 검색") title: String?,
161-
@PageableDefault(size = 10, sort = ["createdAt"], direction = Sort.Direction.DESC)
161+
@Parameter(
162+
description = "페이징 정보 (기본값: 10개, 최신 수정일 순)",
163+
example = "?page=0&size=10&sort=updatedAt,desc"
164+
)
165+
@PageableDefault(size = 10, sort = ["updatedAt"], direction = Sort.Direction.DESC)
162166
pageable: Pageable
163167
): ResponseEntity<UserBookPageResponse>
164168

apis/src/main/kotlin/org/yapp/apis/readingrecord/controller/ReadingRecordControllerApi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,8 @@ interface ReadingRecordControllerApi {
105105
@AuthenticationPrincipal @Parameter(description = "인증된 사용자 ID") userId: UUID,
106106
@PathVariable @Parameter(description = "독서 기록을 조회할 사용자 책 ID") userBookId: UUID,
107107
@RequestParam(required = false) @Parameter(description = "정렬 방식 (PAGE_NUMBER_ASC, PAGE_NUMBER_DESC, CREATED_DATE_ASC, CREATED_DATE_DESC)") sort: ReadingRecordSortType?,
108-
@PageableDefault(size = 10, sort = ["createdAt"], direction = Sort.Direction.DESC)
109-
@Parameter(description = "페이지네이션 정보 (페이지 번호, 페이지 크기, 정렬 방식)") pageable: Pageable
108+
@PageableDefault(size = 10, sort = ["updatedAt"], direction = Sort.Direction.DESC)
109+
@Parameter(description = "페이지네이션 정보 (기본값: 10개, 최신 수정일 순)") pageable: Pageable
110110
): ResponseEntity<ReadingRecordPageResponse>
111111

112112
@Operation(

apis/src/main/kotlin/org/yapp/apis/readingrecord/dto/request/CreateReadingRecordRequest.kt

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,17 +30,19 @@ data class CreateReadingRecordRequest private constructor(
3030
@field:Schema(description = "기억에 남는 문장", example = "이것은 기억에 남는 문장입니다.", required = true)
3131
val quote: String? = null,
3232

33-
@field:NotBlank(message = "감상평은 필수입니다.")
3433
@field:Size(max = 1000, message = "감상평은 1000자를 초과할 수 없습니다.")
35-
@field:Schema(description = "감상평", example = "이 책은 매우 인상적이었습니다.", required = true)
34+
@field:Schema(description = "감상평", example = "이 책은 매우 인상적이었습니다.", required = false)
3635
val review: String? = null,
3736

3837
@field:Size(max = 1, message = "감정 태그는 최대 1개까지 가능합니다. (단일 감정만 받지만, 확장성을 위해 리스트 형태로 관리됩니다.)")
3938
@field:Schema(description = "감정 태그 목록 (현재는 최대 1개, 확장 가능)", example = "[\"감동적\"]")
4039
val emotionTags: List<@Size(max = 10, message = "감정 태그는 10자를 초과할 수 없습니다.") String> = emptyList()
4140
) {
42-
fun validPageNumber(): Int = pageNumber!!
43-
fun validQuote(): String = quote!!
44-
fun validReview(): String = review!!
41+
fun validPageNumber(): Int =
42+
requireNotNull(pageNumber) { "pageNumber는 null일 수 없습니다." }
43+
44+
fun validQuote(): String =
45+
requireNotNull(quote) { "quote는 null일 수 없습니다." }
46+
4547
fun validEmotionTags(): List<String> = emotionTags
4648
}

apis/src/main/kotlin/org/yapp/apis/readingrecord/dto/request/UpdateReadingRecordRequest.kt

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,4 @@ data class UpdateReadingRecordRequest private constructor(
3434
@field:Size(max = 3, message = "감정 태그는 최대 3개까지 가능합니다.")
3535
@field:Schema(description = "수정할 감정 태그 목록", example = """["따뜻함","즐거움","슬픔","깨달음"]""")
3636
val emotionTags: List<@Size(max = 10, message = "감정 태그는 10자를 초과할 수 없습니다.") String>?
37-
) {
38-
fun validPageNumber(): Int = pageNumber!!
39-
fun validQuote(): String = quote!!
40-
fun validReview(): String = review!!
41-
fun validEmotionTags(): List<String> = emotionTags!!
42-
}
37+
)

apis/src/main/kotlin/org/yapp/apis/readingrecord/dto/response/ReadingRecordResponse.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ data class ReadingRecordResponse private constructor(
2424
val quote: String,
2525

2626
@field:Schema(description = "감상평", example = "이 책은 매우 인상적이었습니다.")
27-
val review: String,
27+
val review: String?,
2828

2929
@field:Schema(description = "감정 태그 목록", example = "[\"감동적\", \"슬픔\", \"희망\"]")
3030
val emotionTags: List<String>,
@@ -56,7 +56,7 @@ data class ReadingRecordResponse private constructor(
5656
userBookId = readingRecordInfoVO.userBookId.value,
5757
pageNumber = readingRecordInfoVO.pageNumber.value,
5858
quote = readingRecordInfoVO.quote.value,
59-
review = readingRecordInfoVO.review.value,
59+
review = readingRecordInfoVO.review?.value,
6060
emotionTags = readingRecordInfoVO.emotionTags,
6161
createdAt = readingRecordInfoVO.createdAt.format(dateTimeFormatter),
6262
updatedAt = readingRecordInfoVO.updatedAt.format(dateTimeFormatter),

apis/src/main/kotlin/org/yapp/apis/readingrecord/service/ReadingRecordService.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ class ReadingRecordService(
2525
userBookId = userBookId,
2626
pageNumber = request.validPageNumber(),
2727
quote = request.validQuote(),
28-
review = request.validReview(),
28+
review = request.review,
2929
emotionTags = request.validEmotionTags()
3030
)
3131

@@ -62,10 +62,10 @@ class ReadingRecordService(
6262
): ReadingRecordResponse {
6363
val readingRecordInfoVO = readingRecordDomainService.modifyReadingRecord(
6464
readingRecordId = readingRecordId,
65-
pageNumber = request.validPageNumber(),
66-
quote = request.validQuote(),
67-
review = request.validReview(),
68-
emotionTags = request.validEmotionTags()
65+
pageNumber = request.pageNumber,
66+
quote = request.quote,
67+
review = request.review,
68+
emotionTags = request.emotionTags
6969
)
7070

7171
// Update user's lastActivity when a reading record is updated

domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecord.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ data class ReadingRecord private constructor(
99
val userBookId: UserBookId,
1010
val pageNumber: PageNumber,
1111
val quote: Quote,
12-
val review: Review,
12+
val review: Review?,
1313
val emotionTags: List<EmotionTag> = emptyList(),
1414
val createdAt: LocalDateTime? = null,
1515
val updatedAt: LocalDateTime? = null,
@@ -20,15 +20,15 @@ data class ReadingRecord private constructor(
2020
userBookId: UUID,
2121
pageNumber: Int,
2222
quote: String,
23-
review: String,
23+
review: String?,
2424
emotionTags: List<String> = emptyList()
2525
): ReadingRecord {
2626
return ReadingRecord(
2727
id = Id.newInstance(UuidGenerator.create()),
2828
userBookId = UserBookId.newInstance(userBookId),
2929
pageNumber = PageNumber.newInstance(pageNumber),
3030
quote = Quote.newInstance(quote),
31-
review = Review.newInstance(review),
31+
review = review?.let { Review.newInstance(it) },
3232
emotionTags = emotionTags.map { EmotionTag.newInstance(it) }
3333
)
3434
}
@@ -38,7 +38,7 @@ data class ReadingRecord private constructor(
3838
userBookId: UserBookId,
3939
pageNumber: PageNumber,
4040
quote: Quote,
41-
review: Review,
41+
review: Review?,
4242
emotionTags: List<EmotionTag> = emptyList(),
4343
createdAt: LocalDateTime? = null,
4444
updatedAt: LocalDateTime? = null,
@@ -67,7 +67,7 @@ data class ReadingRecord private constructor(
6767
return this.copy(
6868
pageNumber = pageNumber?.let { PageNumber.newInstance(it) } ?: this.pageNumber,
6969
quote = quote?.let { Quote.newInstance(it) } ?: this.quote,
70-
review = review?.let { Review.newInstance(it) } ?: this.review,
70+
review = review?.let { Review.newInstance(it) },
7171
emotionTags = emotionTags?.map { EmotionTag.newInstance(it) } ?: this.emotionTags,
7272
updatedAt = LocalDateTime.now()
7373
)

domain/src/main/kotlin/org/yapp/domain/readingrecord/ReadingRecordDomainService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ReadingRecordDomainService(
2828
userBookId: UUID,
2929
pageNumber: Int,
3030
quote: String,
31-
review: String,
31+
review: String?,
3232
emotionTags: List<String>
3333
): ReadingRecordInfoVO {
3434
val userBook = userBookRepository.findById(userBookId)

domain/src/main/kotlin/org/yapp/domain/readingrecord/vo/ReadingRecordInfoVO.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ data class ReadingRecordInfoVO private constructor(
88
val userBookId: ReadingRecord.UserBookId,
99
val pageNumber: ReadingRecord.PageNumber,
1010
val quote: ReadingRecord.Quote,
11-
val review: ReadingRecord.Review,
11+
val review: ReadingRecord.Review?,
1212
val emotionTags: List<String>,
1313
val createdAt: LocalDateTime,
1414
val updatedAt: LocalDateTime,

domain/src/main/kotlin/org/yapp/domain/userbook/UserBookSortType.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ enum class UserBookSortType {
55
TITLE_ASC,
66
TITLE_DESC,
77
CREATED_DATE_ASC,
8-
CREATED_DATE_DESC;
8+
CREATED_DATE_DESC,
9+
UPDATED_DATE_ASC,
10+
UPDATED_DATE_DESC;
911
}

0 commit comments

Comments
 (0)