Skip to content

Commit d699260

Browse files
committed
[BOOK-212] feat: 도서 기록 목록 조회 응답 API 연동
1 parent 9d639de commit d699260

File tree

6 files changed

+111
-0
lines changed

6 files changed

+111
-0
lines changed

core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/RecordRepository.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.ninecraft.booket.core.data.api.repository
22

3+
import com.ninecraft.booket.core.model.ReadingRecordsModel
34
import com.ninecraft.booket.core.model.RecordRegisterModel
45

56
interface RecordRepository {
@@ -10,4 +11,11 @@ interface RecordRepository {
1011
emotionTags: List<String>,
1112
review: String,
1213
): Result<RecordRegisterModel>
14+
15+
suspend fun getReadingRecords(
16+
userBookId: String,
17+
sort: String,
18+
page: Int,
19+
size: Int,
20+
): Result<ReadingRecordsModel>
1321
}

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

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import com.ninecraft.booket.core.model.LibraryBookSummaryModel
1212
import com.ninecraft.booket.core.model.LibraryBooksModel
1313
import com.ninecraft.booket.core.model.LibraryModel
1414
import com.ninecraft.booket.core.model.PageInfoModel
15+
import com.ninecraft.booket.core.model.ReadingRecordModel
16+
import com.ninecraft.booket.core.model.ReadingRecordsModel
1517
import com.ninecraft.booket.core.model.RecentBookModel
1618
import com.ninecraft.booket.core.model.RecordRegisterModel
1719
import com.ninecraft.booket.core.model.SeedModel
@@ -26,6 +28,8 @@ import com.ninecraft.booket.core.network.response.LibraryBookSummary
2628
import com.ninecraft.booket.core.network.response.LibraryBooks
2729
import com.ninecraft.booket.core.network.response.LibraryResponse
2830
import com.ninecraft.booket.core.network.response.PageInfo
31+
import com.ninecraft.booket.core.network.response.ReadingRecord
32+
import com.ninecraft.booket.core.network.response.ReadingRecordsResponse
2933
import com.ninecraft.booket.core.network.response.RecentBook
3034
import com.ninecraft.booket.core.network.response.RecordRegisterResponse
3135
import com.ninecraft.booket.core.network.response.SeedResponse
@@ -156,6 +160,29 @@ internal fun RecordRegisterResponse.toModel(): RecordRegisterModel {
156160
)
157161
}
158162

163+
internal fun ReadingRecordsResponse.toModel(): ReadingRecordsModel {
164+
return ReadingRecordsModel(
165+
content = content.map { it.toModel() },
166+
page = page.toModel(),
167+
)
168+
}
169+
170+
internal fun ReadingRecord.toModel(): ReadingRecordModel {
171+
return ReadingRecordModel(
172+
id = id,
173+
userBookId = userBookId,
174+
pageNumber = pageNumber,
175+
quote = quote,
176+
review = review,
177+
emotionTags = emotionTags,
178+
createdAt = createdAt,
179+
updatedAt = updatedAt,
180+
bookTitle = bookTitle,
181+
bookPublisher = bookPublisher,
182+
bookCoverImageUrl = bookCoverImageUrl,
183+
)
184+
}
185+
159186
internal fun HomeResponse.toModel(): HomeModel {
160187
return HomeModel(
161188
recentBooks = recentBooks.map { it.toModel() },

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/repository/DefaultRecordRepository.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,13 @@ class DefaultRecordRepository @Inject constructor(
1919
) = runSuspendCatching {
2020
service.postRecord(userBookId, RecordRegisterRequest(pageNumber, quote, emotionTags, review)).toModel()
2121
}
22+
23+
override suspend fun getReadingRecords(
24+
userBookId: String,
25+
sort: String,
26+
page: Int,
27+
size: Int,
28+
) = runSuspendCatching {
29+
service.getReadingRecords(userBookId, sort, page, size).toModel()
30+
}
2231
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.ninecraft.booket.core.model
2+
3+
data class ReadingRecordsModel(
4+
val content: List<ReadingRecordModel> = emptyList(),
5+
val page: PageInfoModel = PageInfoModel(),
6+
)
7+
8+
data class ReadingRecordModel(
9+
val id: String = "",
10+
val userBookId: String = "",
11+
val pageNumber: Int = 0,
12+
val quote: String = "",
13+
val review: String = "",
14+
val emotionTags: List<String> = emptyList(),
15+
val createdAt: String = "",
16+
val updatedAt: String = "",
17+
val bookTitle: String = "",
18+
val bookPublisher: String = "",
19+
val bookCoverImageUrl: String = "",
20+
)
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.ninecraft.booket.core.network.response
2+
3+
import kotlinx.serialization.SerialName
4+
import kotlinx.serialization.Serializable
5+
6+
@Serializable
7+
data class ReadingRecordsResponse(
8+
@SerialName("content")
9+
val content: List<ReadingRecord>,
10+
@SerialName("page")
11+
val page: PageInfo,
12+
)
13+
14+
@Serializable
15+
data class ReadingRecord(
16+
@SerialName("id")
17+
val id: String,
18+
@SerialName("userBookId")
19+
val userBookId: String,
20+
@SerialName("pageNumber")
21+
val pageNumber: Int,
22+
@SerialName("quote")
23+
val quote: String,
24+
@SerialName("review")
25+
val review: String = "",
26+
@SerialName("emotionTags")
27+
val emotionTags: List<String> = emptyList(),
28+
@SerialName("createdAt")
29+
val createdAt: String,
30+
@SerialName("updatedAt")
31+
val updatedAt: String,
32+
@SerialName("bookTitle")
33+
val bookTitle: String,
34+
@SerialName("bookPublisher")
35+
val bookPublisher: String,
36+
@SerialName("bookCoverImageUrl")
37+
val bookCoverImageUrl: String,
38+
)

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.ninecraft.booket.core.network.response.BookUpsertResponse
1111
import com.ninecraft.booket.core.network.response.HomeResponse
1212
import com.ninecraft.booket.core.network.response.LibraryResponse
1313
import com.ninecraft.booket.core.network.response.LoginResponse
14+
import com.ninecraft.booket.core.network.response.ReadingRecordsResponse
1415
import com.ninecraft.booket.core.network.response.RecordRegisterResponse
1516
import com.ninecraft.booket.core.network.response.RefreshTokenResponse
1617
import com.ninecraft.booket.core.network.response.SeedResponse
@@ -77,6 +78,14 @@ interface ReedService {
7778
@Body recordRegisterRequest: RecordRegisterRequest,
7879
): RecordRegisterResponse
7980

81+
@GET("api/v1/reading-records/{userBookId}")
82+
suspend fun getReadingRecords(
83+
@Path("userBookId") userBookId: String,
84+
@Query("sort") sort: String = "CREATED_DATE_DESC",
85+
@Query("page") page: Int,
86+
@Query("size") size: Int = 20,
87+
): ReadingRecordsResponse
88+
8089
// Home (auth required)
8190
@GET("api/v1/home")
8291
suspend fun getHome(

0 commit comments

Comments
 (0)