Skip to content

Commit c38f9d4

Browse files
authored
Merge pull request #137 from YAPP-Github/BOOK-252-fix/#136
fix: 기록 목록 조회 DTO 변경사항 반영
2 parents 91462f8 + c9bc82c commit c38f9d4

File tree

7 files changed

+38
-24
lines changed

7 files changed

+38
-24
lines changed

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,11 @@ internal fun RecordRegisterResponse.toModel(): RecordRegisterModel {
170170

171171
internal fun ReadingRecordsResponse.toModel(): ReadingRecordsModel {
172172
return ReadingRecordsModel(
173-
content = content.map { it.toModel() },
174-
page = page.toModel(),
173+
lastPage = lastPage,
174+
totalResults = totalResults,
175+
startIndex = startIndex,
176+
itemsPerPage = itemsPerPage,
177+
readingRecords = readingRecords.map { it.toModel() },
175178
)
176179
}
177180

@@ -188,6 +191,7 @@ internal fun ReadingRecord.toModel(): ReadingRecordModel {
188191
bookTitle = bookTitle,
189192
bookPublisher = bookPublisher,
190193
bookCoverImageUrl = bookCoverImageUrl,
194+
author = author,
191195
)
192196
}
193197

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package com.ninecraft.booket.core.model
22

33
data class ReadingRecordsModel(
4-
val content: List<ReadingRecordModel> = emptyList(),
5-
val page: PageInfoModel = PageInfoModel(),
4+
val lastPage: Boolean = true,
5+
val totalResults: Int = 0,
6+
val startIndex: Int = 0,
7+
val itemsPerPage: Int = 0,
8+
val readingRecords: List<ReadingRecordModel> = emptyList(),
69
)
710

811
data class ReadingRecordModel(
@@ -17,4 +20,5 @@ data class ReadingRecordModel(
1720
val bookTitle: String = "",
1821
val bookPublisher: String = "",
1922
val bookCoverImageUrl: String = "",
23+
val author: String = "",
2024
)

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

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,16 @@ import kotlinx.serialization.Serializable
55

66
@Serializable
77
data class ReadingRecordsResponse(
8-
@SerialName("content")
9-
val content: List<ReadingRecord>,
10-
@SerialName("page")
11-
val page: PageInfo,
8+
@SerialName("lastPage")
9+
val lastPage: Boolean,
10+
@SerialName("totalResults")
11+
val totalResults: Int,
12+
@SerialName("startIndex")
13+
val startIndex: Int,
14+
@SerialName("itemsPerPage")
15+
val itemsPerPage: Int,
16+
@SerialName("readingRecords")
17+
val readingRecords: List<ReadingRecord>,
1218
)
1319

1420
@Serializable
@@ -35,4 +41,6 @@ data class ReadingRecord(
3541
val bookPublisher: String,
3642
@SerialName("bookCoverImageUrl")
3743
val bookCoverImageUrl: String,
44+
@SerialName("author")
45+
val author: String,
3846
)

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ import com.ninecraft.booket.core.data.api.repository.BookRepository
1515
import com.ninecraft.booket.core.data.api.repository.RecordRepository
1616
import com.ninecraft.booket.core.model.BookDetailModel
1717
import com.ninecraft.booket.core.model.EmotionModel
18-
import com.ninecraft.booket.core.model.PageInfoModel
1918
import com.ninecraft.booket.core.model.ReadingRecordModel
2019
import com.ninecraft.booket.core.ui.component.FooterState
2120
import com.ninecraft.booket.feature.screens.BookDetailScreen
@@ -36,6 +35,7 @@ import kotlinx.collections.immutable.persistentListOf
3635
import kotlinx.collections.immutable.toImmutableList
3736
import kotlinx.collections.immutable.toPersistentList
3837
import kotlinx.coroutines.async
38+
import kotlinx.coroutines.coroutineScope
3939
import kotlinx.coroutines.launch
4040
import java.time.LocalDateTime
4141

@@ -65,7 +65,7 @@ class BookDetailPresenter @AssistedInject constructor(
6565
var bookDetail by rememberRetained { mutableStateOf(BookDetailModel()) }
6666
var seedsStates by rememberRetained { mutableStateOf<ImmutableList<EmotionModel>>(persistentListOf()) }
6767
var readingRecords by rememberRetained { mutableStateOf(persistentListOf<ReadingRecordModel>()) }
68-
var readingRecordsPageInfo by rememberRetained { mutableStateOf(PageInfoModel()) }
68+
var readingRecordsTotalCount by rememberRetained { mutableIntStateOf(0) }
6969
var currentStartIndex by rememberRetained { mutableIntStateOf(START_INDEX) }
7070
var isLastPage by rememberRetained { mutableStateOf(false) }
7171
var currentBookStatus by rememberRetained { mutableStateOf(BookStatus.READING) }
@@ -76,11 +76,11 @@ class BookDetailPresenter @AssistedInject constructor(
7676
var sideEffect by rememberRetained { mutableStateOf<BookDetailSideEffect?>(null) }
7777

7878
@Suppress("TooGenericExceptionCaught")
79-
fun initialLoad() {
79+
suspend fun initialLoad() {
8080
uiState = UiState.Loading
8181

8282
try {
83-
scope.launch {
83+
coroutineScope {
8484
val bookDetailDef = async { bookRepository.getBookDetail(screen.isbn13).getOrThrow() }
8585
val seedsDef = async { bookRepository.getSeedsStats(screen.userBookId).getOrThrow() }
8686
val readingRecordsDef = async {
@@ -99,10 +99,10 @@ class BookDetailPresenter @AssistedInject constructor(
9999
currentBookStatus = BookStatus.fromValue(detail.userBookStatus) ?: BookStatus.BEFORE_READING
100100
selectedBookStatus = currentBookStatus
101101
seedsStates = seeds.categories.toImmutableList()
102-
readingRecords = records.content.toPersistentList()
103-
readingRecordsPageInfo = records.page
102+
readingRecords = records.readingRecords.toPersistentList()
103+
readingRecordsTotalCount = records.totalResults
104104

105-
isLastPage = records.content.size < PAGE_SIZE
105+
isLastPage = records.lastPage
106106
currentStartIndex = START_INDEX
107107

108108
uiState = UiState.Success
@@ -170,9 +170,9 @@ class BookDetailPresenter @AssistedInject constructor(
170170
page = startIndex,
171171
size = PAGE_SIZE,
172172
).onSuccess { result ->
173-
readingRecords = (readingRecords + result.content).toPersistentList()
173+
readingRecords = (readingRecords + result.readingRecords).toPersistentList()
174174
currentStartIndex = startIndex
175-
isLastPage = result.content.size < PAGE_SIZE
175+
isLastPage = result.lastPage
176176
footerState = if (isLastPage) FooterState.End else FooterState.Idle
177177
}.onFailure { exception ->
178178
Logger.d(exception)
@@ -254,7 +254,7 @@ class BookDetailPresenter @AssistedInject constructor(
254254
bookDetail = bookDetail,
255255
seedsStats = seedsStates,
256256
readingRecords = readingRecords,
257-
readingRecordsPageInfo = readingRecordsPageInfo,
257+
readingRecordsTotalCount = readingRecordsTotalCount,
258258
isBookUpdateBottomSheetVisible = isBookUpdateBottomSheetVisible,
259259
isRecordSortBottomSheetVisible = isRecordSortBottomSheetVisible,
260260
currentBookStatus = currentBookStatus,

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ internal fun BookDetailContent(
223223
) {
224224
Spacer(modifier = Modifier.height(ReedTheme.spacing.spacing6))
225225
ReadingRecordsHeader(
226-
pageInfo = state.readingRecordsPageInfo,
226+
totalCount = state.readingRecordsTotalCount,
227227
currentRecordSort = state.currentRecordSort,
228228
onReadingRecordClick = {
229229
state.eventSink(BookDetailUiEvent.OnRecordSortButtonClick)

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import com.ninecraft.booket.core.common.R
55
import com.ninecraft.booket.core.common.constants.BookStatus
66
import com.ninecraft.booket.core.model.BookDetailModel
77
import com.ninecraft.booket.core.model.EmotionModel
8-
import com.ninecraft.booket.core.model.PageInfoModel
98
import com.ninecraft.booket.core.model.ReadingRecordModel
109
import com.ninecraft.booket.core.ui.component.FooterState
1110
import com.slack.circuit.runtime.CircuitUiEvent
@@ -28,7 +27,7 @@ data class BookDetailUiState(
2827
val bookDetail: BookDetailModel = BookDetailModel(),
2928
val seedsStats: ImmutableList<EmotionModel> = persistentListOf(),
3029
val readingRecords: ImmutableList<ReadingRecordModel> = persistentListOf(),
31-
val readingRecordsPageInfo: PageInfoModel = PageInfoModel(),
30+
val readingRecordsTotalCount: Int = 0,
3231
val currentStartIndex: Int = 1,
3332
val isLastPage: Boolean = false,
3433
val currentBookStatus: BookStatus = BookStatus.BEFORE_READING,

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,13 @@ import androidx.compose.ui.graphics.vector.ImageVector
1515
import androidx.compose.ui.res.stringResource
1616
import androidx.compose.ui.res.vectorResource
1717
import com.ninecraft.booket.core.designsystem.theme.ReedTheme
18-
import com.ninecraft.booket.core.model.PageInfoModel
1918
import com.ninecraft.booket.feature.detail.R
2019
import com.ninecraft.booket.feature.detail.book.RecordSort
2120
import com.ninecraft.booket.core.designsystem.R as designR
2221

2322
@Composable
2423
internal fun ReadingRecordsHeader(
25-
pageInfo: PageInfoModel,
24+
totalCount: Int,
2625
currentRecordSort: RecordSort,
2726
onReadingRecordClick: () -> Unit,
2827
modifier: Modifier = Modifier,
@@ -40,7 +39,7 @@ internal fun ReadingRecordsHeader(
4039
)
4140
Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing1))
4241
Text(
43-
text = "${pageInfo.totalElements}",
42+
text = "$totalCount",
4443
color = ReedTheme.colors.contentBrand,
4544
style = ReedTheme.typography.headline2SemiBold,
4645
)

0 commit comments

Comments
 (0)