Skip to content

Commit 8ed93df

Browse files
committed
[BOOK-481] feat: reading-records API v1 -> v2 API endpoint 교체
API response 변경 사항 반영 but, 제대로 내려오지 않는 문제 해결되어야 함
1 parent 135ab71 commit 8ed93df

11 files changed

Lines changed: 78 additions & 28 deletions

File tree

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ import com.ninecraft.booket.core.model.LibraryBookSummaryModel
1313
import com.ninecraft.booket.core.model.LibraryBooksModel
1414
import com.ninecraft.booket.core.model.LibraryModel
1515
import com.ninecraft.booket.core.model.PageInfoModel
16+
import com.ninecraft.booket.core.model.DetailEmotionModel
17+
import com.ninecraft.booket.core.model.PrimaryEmotionModel
1618
import com.ninecraft.booket.core.model.ReadingRecordModel
1719
import com.ninecraft.booket.core.model.ReadingRecordsModel
1820
import com.ninecraft.booket.core.model.RecentBookModel
@@ -33,6 +35,8 @@ import com.ninecraft.booket.core.network.response.LibraryBookSummary
3335
import com.ninecraft.booket.core.network.response.LibraryBooks
3436
import com.ninecraft.booket.core.network.response.LibraryResponse
3537
import com.ninecraft.booket.core.network.response.PageInfo
38+
import com.ninecraft.booket.core.network.response.DetailEmotion
39+
import com.ninecraft.booket.core.network.response.PrimaryEmotion
3640
import com.ninecraft.booket.core.network.response.ReadingRecord
3741
import com.ninecraft.booket.core.network.response.ReadingRecordsResponse
3842
import com.ninecraft.booket.core.network.response.RecentBook
@@ -217,7 +221,8 @@ internal fun ReadingRecord.toModel(): ReadingRecordModel {
217221
pageNumber = pageNumber,
218222
quote = quote,
219223
review = review ?: "",
220-
emotionTags = emotionTags,
224+
primaryEmotion = primaryEmotion.toModel(),
225+
detailEmotions = detailEmotions.map { it.toModel() },
221226
createdAt = createdAt,
222227
updatedAt = updatedAt,
223228
bookTitle = bookTitle,
@@ -227,6 +232,20 @@ internal fun ReadingRecord.toModel(): ReadingRecordModel {
227232
)
228233
}
229234

235+
internal fun PrimaryEmotion.toModel(): PrimaryEmotionModel {
236+
return PrimaryEmotionModel(
237+
code = code,
238+
displayName = displayName,
239+
)
240+
}
241+
242+
internal fun DetailEmotion.toModel(): DetailEmotionModel {
243+
return DetailEmotionModel(
244+
id = id,
245+
name = name,
246+
)
247+
}
248+
230249
internal fun RecordDetailResponse.toModel(): RecordDetailModel {
231250
return RecordDetailModel(
232251
id = id,

core/model/src/main/kotlin/com/ninecraft/booket/core/model/ReadingRecordsModel.kt

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,24 @@ data class ReadingRecordModel(
1717
val pageNumber: Int = 0,
1818
val quote: String = "",
1919
val review: String = "",
20-
val emotionTags: List<String> = emptyList(),
20+
val primaryEmotion: PrimaryEmotionModel = PrimaryEmotionModel(),
21+
val detailEmotions: List<DetailEmotionModel> = emptyList(),
2122
val createdAt: String = "",
2223
val updatedAt: String = "",
2324
val bookTitle: String = "",
2425
val bookPublisher: String = "",
2526
val bookCoverImageUrl: String = "",
2627
val author: String = "",
2728
)
29+
30+
@Immutable
31+
data class PrimaryEmotionModel(
32+
val code: String = "",
33+
val displayName: String = "",
34+
)
35+
36+
@Immutable
37+
data class DetailEmotionModel(
38+
val id: String = "",
39+
val name: String = "",
40+
)

core/network/src/main/kotlin/com/ninecraft/booket/core/network/response/ReadingRecordsResponse.kt

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ data class ReadingRecord(
2929
val quote: String,
3030
@SerialName("review")
3131
val review: String?,
32-
@SerialName("emotionTags")
33-
val emotionTags: List<String> = emptyList(),
32+
@SerialName("primaryEmotion")
33+
val primaryEmotion: PrimaryEmotion,
34+
@SerialName("detailEmotions")
35+
val detailEmotions: List<DetailEmotion> = emptyList(),
3436
@SerialName("createdAt")
3537
val createdAt: String,
3638
@SerialName("updatedAt")
@@ -44,3 +46,19 @@ data class ReadingRecord(
4446
@SerialName("author")
4547
val author: String,
4648
)
49+
50+
@Serializable
51+
data class PrimaryEmotion(
52+
@SerialName("code")
53+
val code: String,
54+
@SerialName("displayName")
55+
val displayName: String,
56+
)
57+
58+
@Serializable
59+
data class DetailEmotion(
60+
@SerialName("id")
61+
val id: String,
62+
@SerialName("name")
63+
val name: String,
64+
)

core/network/src/main/kotlin/com/ninecraft/booket/core/network/service/ReedService.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,13 @@ interface ReedService {
108108
)
109109

110110
// Reading-records endpoints (auth required)
111-
@POST("api/v1/reading-records/{userBookId}")
111+
@POST("api/v2/reading-records/{userBookId}")
112112
suspend fun postRecord(
113113
@Path("userBookId") userBookId: String,
114114
@Body recordRegisterRequest: RecordRegisterRequest,
115115
): RecordRegisterResponse
116116

117-
@GET("api/v1/reading-records/{userBookId}")
117+
@GET("api/v2/reading-records/{userBookId}")
118118
suspend fun getReadingRecords(
119119
@Path("userBookId") userBookId: String,
120120
@Query("sort") sort: String = "CREATED_DATE_DESC",
@@ -132,13 +132,13 @@ interface ReedService {
132132
@Path("readingRecordId") readingRecordId: String,
133133
): RecordDetailResponse
134134

135-
@PATCH("api/v1/reading-records/{readingRecordId}")
135+
@PATCH("api/v2/reading-records/{readingRecordId}")
136136
suspend fun editRecord(
137137
@Path("readingRecordId") readingRecordId: String,
138138
@Body recordRegisterRequest: RecordRegisterRequest,
139139
): ReadingRecord
140140

141-
@DELETE("api/v1/reading-records/{readingRecordId}")
141+
@DELETE("api/v2/reading-records/{readingRecordId}")
142142
suspend fun deleteRecord(
143143
@Path("readingRecordId") readingRecordId: String,
144144
)

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailPresenter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -315,7 +315,7 @@ class BookDetailPresenter(
315315
RecordCardScreen(
316316
quote = selectedRecordInfo.quote,
317317
bookTitle = selectedRecordInfo.bookTitle,
318-
emotion = selectedRecordInfo.emotionTags[0],
318+
emotion = selectedRecordInfo.primaryEmotion.displayName,
319319
),
320320
)
321321
}
@@ -329,7 +329,7 @@ class BookDetailPresenter(
329329
pageNumber = selectedRecordInfo.pageNumber,
330330
quote = selectedRecordInfo.quote,
331331
review = selectedRecordInfo.review,
332-
emotionTags = selectedRecordInfo.emotionTags,
332+
primaryEmotionDisplayName = selectedRecordInfo.primaryEmotion.displayName,
333333
bookTitle = selectedRecordInfo.bookTitle,
334334
bookPublisher = selectedRecordInfo.bookPublisher,
335335
bookCoverImageUrl = selectedRecordInfo.bookCoverImageUrl,

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/BookDetailUi.kt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import com.ninecraft.booket.core.designsystem.theme.ReedTheme
3838
import com.ninecraft.booket.core.model.BookDetailModel
3939
import com.ninecraft.booket.core.model.Emotion
4040
import com.ninecraft.booket.core.model.EmotionModel
41+
import com.ninecraft.booket.core.model.PrimaryEmotionModel
4142
import com.ninecraft.booket.core.model.ReadingRecordModel
4243
import com.ninecraft.booket.core.ui.ReedScaffold
4344
import com.ninecraft.booket.core.ui.component.InfinityLazyColumn
@@ -418,23 +419,23 @@ private fun BookDetailSeedStatsPreview() {
418419
pageNumber = 42,
419420
quote = "새는 알에서 나오려고 투쟁한다. 알은 세계이다.",
420421
review = "정말 인상 깊은 구절이었다.",
421-
emotionTags = listOf("깨달음", "따뜻함"),
422+
primaryEmotion = PrimaryEmotionModel(code = "INSIGHT", displayName = "깨달음"),
422423
createdAt = "2024-01-15T10:30:00.000000",
423424
),
424425
ReadingRecordModel(
425426
id = "2",
426427
pageNumber = 78,
427428
quote = "나는 더 이상 꿈을 꾸지 않으려 했다.",
428429
review = "성장통을 느끼는 부분",
429-
emotionTags = listOf("슬픔"),
430+
primaryEmotion = PrimaryEmotionModel(code = "SAD", displayName = "슬픔"),
430431
createdAt = "2024-01-20T14:20:00.000000",
431432
),
432433
ReadingRecordModel(
433434
id = "3",
434435
pageNumber = 156,
435436
quote = "운명과 성향은 같은 개념의 두 이름이다.",
436437
review = "내 삶을 돌아보게 되었다.",
437-
emotionTags = listOf("깨달음", "즐거움"),
438+
primaryEmotion = PrimaryEmotionModel(code = "INSIGHT", displayName = "깨달음"),
438439
createdAt = "2024-01-25T09:15:00.000000",
439440
),
440441
),
@@ -472,23 +473,23 @@ private fun BookDetailSeedsStatsExpandedPreview() {
472473
pageNumber = 42,
473474
quote = "새는 알에서 나오려고 투쟁한다. 알은 세계이다.",
474475
review = "정말 인상 깊은 구절이었다.",
475-
emotionTags = listOf("깨달음", "따뜻함"),
476+
primaryEmotion = PrimaryEmotionModel(code = "INSIGHT", displayName = "깨달음"),
476477
createdAt = "2024-01-15T10:30:00.000000",
477478
),
478479
ReadingRecordModel(
479480
id = "2",
480481
pageNumber = 78,
481482
quote = "나는 더 이상 꿈을 꾸지 않으려 했다.",
482483
review = "성장통을 느끼는 부분",
483-
emotionTags = listOf("슬픔"),
484+
primaryEmotion = PrimaryEmotionModel(code = "SAD", displayName = "슬픔"),
484485
createdAt = "2024-01-20T14:20:00.000000",
485486
),
486487
ReadingRecordModel(
487488
id = "3",
488489
pageNumber = 156,
489490
quote = "운명과 성향은 같은 개념의 두 이름이다.",
490491
review = "내 삶을 돌아보게 되었다.",
491-
emotionTags = listOf("깨달음", "즐거움"),
492+
primaryEmotion = PrimaryEmotionModel(code = "INSIGHT", displayName = "깨달음"),
492493
createdAt = "2024-01-25T09:15:00.000000",
493494
),
494495
),

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/book/component/RecordItem.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ import androidx.compose.ui.text.style.TextOverflow
2424
import com.ninecraft.booket.core.common.extensions.toFormattedDate
2525
import com.ninecraft.booket.core.designsystem.ComponentPreview
2626
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
27+
import com.ninecraft.booket.core.model.PrimaryEmotionModel
2728
import com.ninecraft.booket.core.model.ReadingRecordModel
2829
import com.ninecraft.booket.feature.detail.R
29-
import kotlinx.collections.immutable.persistentListOf
3030
import com.ninecraft.booket.core.designsystem.R as designR
3131

3232
@Composable
@@ -86,7 +86,7 @@ internal fun RecordItem(
8686
verticalAlignment = Alignment.CenterVertically,
8787
) {
8888
Text(
89-
text = "#${recordInfo.emotionTags[0]}",
89+
text = "#${recordInfo.primaryEmotion.displayName}",
9090
color = ReedTheme.colors.contentTertiary,
9191
style = ReedTheme.typography.label1Medium,
9292
)
@@ -118,7 +118,7 @@ private fun RecordItemPreview() {
118118
RecordItem(
119119
recordInfo = ReadingRecordModel(
120120
quote = "소설가들은 늘 소재를 찾아 떠도는 존재 같지만, 실은 그 반대인 경우가 더 잦다.",
121-
emotionTags = persistentListOf("따뜻함"),
121+
primaryEmotion = PrimaryEmotionModel(code = "WARM", displayName = "따뜻함"),
122122
pageNumber = 12,
123123
createdAt = "2025-06-25T10:30:00.000000",
124124
),

feature/detail/src/main/kotlin/com/ninecraft/booket/feature/detail/record/RecordDetailPresenter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class RecordDetailPresenter(
148148
pageNumber = recordDetailInfo.pageNumber,
149149
quote = recordDetailInfo.quote,
150150
review = recordDetailInfo.review,
151-
emotionTags = recordDetailInfo.emotionTags,
151+
primaryEmotionDisplayName = recordDetailInfo.emotionTags.firstOrNull() ?: "",
152152
bookTitle = recordDetailInfo.bookTitle,
153153
bookPublisher = recordDetailInfo.bookPublisher,
154154
bookCoverImageUrl = recordDetailInfo.bookCoverImageUrl,

feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditPresenter.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class RecordEditPresenter(
6666
val pageChanged = recordPageState.text.toString() != recordInfo.pageNumber.toString()
6767
val quoteChanged = recordQuoteState.text.toString() != recordInfo.quote
6868
val impressionChanged = recordImpressionState.text.toString() != recordInfo.review
69-
val emotionChanged = recordInfo.emotionTags != screen.recordInfo.emotionTags
69+
val emotionChanged = recordInfo.primaryEmotionDisplayName != screen.recordInfo.primaryEmotionDisplayName
7070
pageChanged || quoteChanged || impressionChanged || emotionChanged
7171
}
7272
}
@@ -81,7 +81,7 @@ class RecordEditPresenter(
8181
var sideEffect by rememberRetained { mutableStateOf<RecordEditSideEffect?>(null) }
8282

8383
val emotionEditNavigator = rememberAnsweringNavigator<EmotionEditScreen.Result>(navigator) { result ->
84-
recordInfo = recordInfo.copy(emotionTags = listOf(result.emotion))
84+
recordInfo = recordInfo.copy(primaryEmotionDisplayName = result.emotion)
8585
}
8686

8787
fun editRecord(
@@ -130,16 +130,15 @@ class RecordEditPresenter(
130130
}
131131

132132
RecordEditUiEvent.OnEmotionEditClick -> {
133-
val emotion = recordInfo.emotionTags.firstOrNull() ?: ""
134-
emotionEditNavigator.goTo(EmotionEditScreen(emotion))
133+
emotionEditNavigator.goTo(EmotionEditScreen(recordInfo.primaryEmotionDisplayName))
135134
}
136135

137136
RecordEditUiEvent.OnSaveButtonClick -> {
138137
editRecord(
139138
readingRecordId = recordInfo.id,
140139
pageNumber = recordPageState.text.toString().toIntOrNull() ?: 0,
141140
quote = recordQuoteState.text.toString(),
142-
emotionTags = recordInfo.emotionTags,
141+
emotionTags = listOf(recordInfo.primaryEmotionDisplayName),
143142
impression = recordImpressionState.text.toString(),
144143
onSuccess = {
145144
navigator.pop()

feature/edit/src/main/kotlin/com/ninecraft/booket/feature/edit/record/RecordEditUi.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ private fun ColumnScope.RecordEditContent(state: RecordEditUiState) {
184184
state.eventSink(RecordEditUiEvent.OnEmotionEditClick)
185185
},
186186
) {
187-
val emotion = state.recordInfo.emotionTags.firstOrNull() ?: ""
187+
val emotion = state.recordInfo.primaryEmotionDisplayName
188188

189189
Text(
190190
text = emotion,
@@ -230,7 +230,7 @@ private fun RecordEditUiPreview() {
230230
pageNumber = 33,
231231
quote = "소설가들은 늘 소재를 찾아 떠도는 존재 같지만, 실은 그 반대인 경우가 더 잦다.",
232232
review = "감동적이었다.",
233-
emotionTags = listOf("따뜻함"),
233+
primaryEmotionDisplayName = "따뜻함",
234234
bookTitle = "여름은 오래 그곳에 남아",
235235
bookPublisher = "비채",
236236
bookCoverImageUrl = "",

0 commit comments

Comments
 (0)