Skip to content

Commit aa7ad98

Browse files
committed
[BOOK-212] feat: 씨앗 통계 조회 API 연동
HomeRepository 제거 BookRepository에 통합
1 parent ea76358 commit aa7ad98

File tree

17 files changed

+169
-78
lines changed

17 files changed

+169
-78
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package com.ninecraft.booket.core.data.api.repository
33
import com.ninecraft.booket.core.model.BookDetailModel
44
import com.ninecraft.booket.core.model.BookSearchModel
55
import com.ninecraft.booket.core.model.BookUpsertModel
6+
import com.ninecraft.booket.core.model.HomeModel
67
import kotlinx.coroutines.flow.Flow
78
import com.ninecraft.booket.core.model.LibraryModel
9+
import com.ninecraft.booket.core.model.SeedModel
810

911
interface BookRepository {
1012
val recentSearches: Flow<List<String>>
@@ -23,9 +25,14 @@ interface BookRepository {
2325
bookStatus: String,
2426
): Result<BookUpsertModel>
2527

28+
suspend fun getHome(): Result<HomeModel>
29+
2630
suspend fun getLibrary(
2731
status: String?,
2832
page: Int,
2933
size: Int,
3034
): Result<LibraryModel>
35+
36+
suspend fun getSeedsStats(): Result<SeedModel>
37+
3138
}

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

Lines changed: 0 additions & 7 deletions
This file was deleted.

core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/di/RepositoryModule.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,10 @@ package com.ninecraft.booket.core.data.impl.di
22

33
import com.ninecraft.booket.core.data.api.repository.AuthRepository
44
import com.ninecraft.booket.core.data.api.repository.BookRepository
5-
import com.ninecraft.booket.core.data.api.repository.HomeRepository
65
import com.ninecraft.booket.core.data.api.repository.RecordRepository
76
import com.ninecraft.booket.core.data.api.repository.UserRepository
87
import com.ninecraft.booket.core.data.impl.repository.DefaultAuthRepository
98
import com.ninecraft.booket.core.data.impl.repository.DefaultBookRepository
10-
import com.ninecraft.booket.core.data.impl.repository.DefaultHomeRepository
119
import com.ninecraft.booket.core.data.impl.repository.DefaultRecordRepository
1210
import com.ninecraft.booket.core.data.impl.repository.DefaultUserRepository
1311
import dagger.Binds
@@ -35,8 +33,4 @@ internal abstract class RepositoryModule {
3533
@Binds
3634
@Singleton
3735
abstract fun bindRecordRepository(defaultRecordRepository: DefaultRecordRepository): RecordRepository
38-
39-
@Binds
40-
@Singleton
41-
abstract fun bindHomeRepository(defaultHomeRepository: DefaultHomeRepository): HomeRepository
4236
}

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,30 @@ import com.ninecraft.booket.core.model.BookDetailModel
55
import com.ninecraft.booket.core.model.BookSearchModel
66
import com.ninecraft.booket.core.model.BookSummaryModel
77
import com.ninecraft.booket.core.model.BookUpsertModel
8+
import com.ninecraft.booket.core.model.Emotion
9+
import com.ninecraft.booket.core.model.EmotionModel
810
import com.ninecraft.booket.core.model.HomeModel
911
import com.ninecraft.booket.core.model.LibraryBookSummaryModel
1012
import com.ninecraft.booket.core.model.LibraryBooksModel
1113
import com.ninecraft.booket.core.model.LibraryModel
1214
import com.ninecraft.booket.core.model.PageInfoModel
1315
import com.ninecraft.booket.core.model.RecentBookModel
1416
import com.ninecraft.booket.core.model.RecordRegisterModel
17+
import com.ninecraft.booket.core.model.SeedModel
1518
import com.ninecraft.booket.core.model.UserProfileModel
1619
import com.ninecraft.booket.core.network.response.BookDetailResponse
1720
import com.ninecraft.booket.core.network.response.BookSearchResponse
1821
import com.ninecraft.booket.core.network.response.BookSummary
1922
import com.ninecraft.booket.core.network.response.BookUpsertResponse
23+
import com.ninecraft.booket.core.network.response.Category
2024
import com.ninecraft.booket.core.network.response.HomeResponse
2125
import com.ninecraft.booket.core.network.response.LibraryBookSummary
2226
import com.ninecraft.booket.core.network.response.LibraryBooks
2327
import com.ninecraft.booket.core.network.response.LibraryResponse
2428
import com.ninecraft.booket.core.network.response.PageInfo
2529
import com.ninecraft.booket.core.network.response.RecentBook
2630
import com.ninecraft.booket.core.network.response.RecordRegisterResponse
31+
import com.ninecraft.booket.core.network.response.SeedResponse
2732
import com.ninecraft.booket.core.network.response.UserProfileResponse
2833

2934
internal fun UserProfileResponse.toModel(): UserProfileModel {
@@ -173,3 +178,17 @@ internal fun RecentBook.toModel(): RecentBookModel {
173178
recordCount = recordCount,
174179
)
175180
}
181+
182+
internal fun SeedResponse.toModel(): SeedModel {
183+
return SeedModel(
184+
categories = categories.mapNotNull { it.toEmotionModel() },
185+
)
186+
}
187+
188+
internal fun Category.toEmotionModel(): EmotionModel? {
189+
val emotion = Emotion.fromDisplayName(name) ?: return null
190+
return EmotionModel(
191+
name = emotion,
192+
count = count,
193+
)
194+
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.ninecraft.booket.core.common.utils.runSuspendCatching
44
import com.ninecraft.booket.core.data.api.repository.BookRepository
55
import com.ninecraft.booket.core.data.impl.mapper.toModel
66
import com.ninecraft.booket.core.datastore.api.datasource.RecentSearchDataSource
7+
import com.ninecraft.booket.core.model.SeedModel
78
import com.ninecraft.booket.core.network.request.BookUpsertRequest
89
import com.ninecraft.booket.core.network.service.ReedService
910
import javax.inject.Inject
@@ -39,7 +40,19 @@ internal class DefaultBookRepository @Inject constructor(
3940
service.upsertBook(BookUpsertRequest(bookIsbn, bookStatus)).toModel()
4041
}
4142

42-
override suspend fun getLibrary(status: String?, page: Int, size: Int) = runSuspendCatching {
43+
override suspend fun getHome() = runSuspendCatching {
44+
service.getHome().toModel()
45+
}
46+
47+
override suspend fun getLibrary(
48+
status: String?,
49+
page: Int,
50+
size: Int,
51+
) = runSuspendCatching {
4352
service.getLibrary(status, page, size).toModel()
4453
}
54+
55+
override suspend fun getSeedsStats() = runSuspendCatching {
56+
service.getSeedsStats().toModel()
57+
}
4558
}

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

Lines changed: 0 additions & 15 deletions
This file was deleted.

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

Lines changed: 0 additions & 18 deletions
This file was deleted.
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.ninecraft.booket.core.model
2+
3+
import androidx.compose.runtime.Stable
4+
5+
@Stable
6+
data class SeedModel(
7+
val categories: List<EmotionModel> = emptyList(),
8+
)
9+
10+
@Stable
11+
data class EmotionModel(
12+
val name: Emotion,
13+
val count: Int,
14+
)
15+
16+
enum class Emotion(
17+
val displayName: String,
18+
) {
19+
WARM("따뜻함"),
20+
JOY("즐거움"),
21+
TENSION("긴장감"),
22+
SADNESS("슬픔");
23+
24+
companion object {
25+
fun fromDisplayName(displayName: String): Emotion? {
26+
return entries.find { it.displayName == displayName }
27+
}
28+
}
29+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
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 SeedResponse(
8+
@SerialName("categories")
9+
val categories: List<Category>,
10+
)
11+
12+
@Serializable
13+
data class Category(
14+
@SerialName("name")
15+
val name: String,
16+
@SerialName("count")
17+
val count: Int,
18+
)

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.ninecraft.booket.core.network.response.LibraryResponse
1313
import com.ninecraft.booket.core.network.response.LoginResponse
1414
import com.ninecraft.booket.core.network.response.RecordRegisterResponse
1515
import com.ninecraft.booket.core.network.response.RefreshTokenResponse
16+
import com.ninecraft.booket.core.network.response.SeedResponse
1617
import com.ninecraft.booket.core.network.response.TermsAgreementResponse
1718
import com.ninecraft.booket.core.network.response.UserProfileResponse
1819
import retrofit2.http.Body
@@ -83,4 +84,8 @@ interface ReedService {
8384
suspend fun getHome(
8485
@Query("limit") limit: Int = 3,
8586
): HomeResponse
87+
88+
// Seed (auth required)
89+
@GET("api/v1/seeds/stats")
90+
suspend fun getSeedsStats(): SeedResponse
8691
}

0 commit comments

Comments
 (0)