Skip to content

Commit 4d4a031

Browse files
committed
Merge branch 'develop' into BOOK-197-feature/#86
2 parents 207344c + adb8e0b commit 4d4a031

File tree

84 files changed

+2107
-353
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

84 files changed

+2107
-353
lines changed

core/common/build.gradle.kts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ dependencies {
1616
projects.core.model,
1717
projects.core.network,
1818

19+
libs.kotlinx.collections.immutable,
20+
1921
libs.logger,
2022
)
2123
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.ninecraft.booket.core.common.constants
2+
3+
import com.ninecraft.booket.core.common.R
4+
5+
enum class BookStatus(val value: String) {
6+
BEFORE_READING("BEFORE_READING"),
7+
READING("READING"),
8+
COMPLETED("COMPLETED"),
9+
;
10+
11+
fun getDisplayNameRes(): Int {
12+
return when (this) {
13+
BEFORE_READING -> R.string.book_status_before
14+
READING -> R.string.book_status_reading
15+
COMPLETED -> R.string.book_status_completed
16+
}
17+
}
18+
19+
companion object Companion {
20+
fun fromValue(value: String): BookStatus? {
21+
return entries.find { it.value == value }
22+
}
23+
}
24+
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.ninecraft.booket.core.common.constants
22

33
enum class WebViewConstants(val url: String, val title: String) {
4-
PRIVACY_POLICY("https://www.google.com", "개인정보처리방침"),
5-
TERMS_OF_SERVICE("https://m.naver.com", "이용약관"),
4+
PRIVACY_POLICY("https://sites.google.com/view/reed-privacypolicy", "개인정보처리방침"),
5+
TERMS_OF_SERVICE("https://sites.google.com/view/reed-termsofuse", "이용약관"),
66
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.ninecraft.booket.core.common.extensions
2+
3+
import androidx.compose.ui.graphics.Color
4+
import com.ninecraft.booket.core.model.Emotion
5+
6+
fun Emotion.toTextColor(): Color {
7+
return when (this) {
8+
Emotion.WARM -> Color(0xFFE3931B)
9+
Emotion.JOY -> Color(0xFFEE6B33)
10+
Emotion.TENSION -> Color(0xFF9A55E4)
11+
Emotion.SADNESS -> Color(0xFF2872E9)
12+
}
13+
}
14+
15+
fun Emotion.toBackgroundColor(): Color {
16+
return when (this) {
17+
Emotion.WARM -> Color(0xFFFFF5D3)
18+
Emotion.JOY -> Color(0xFFFFEBE3)
19+
Emotion.TENSION -> Color(0xFFF3E8FF)
20+
Emotion.SADNESS -> Color(0xFFE1ECFF)
21+
}
22+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.ninecraft.booket.core.common.util
2+
3+
import com.ninecraft.booket.core.model.EmotionModel
4+
5+
data class EmotionAnalysisResult(
6+
val topEmotions: List<EmotionModel>,
7+
val displayType: EmotionDisplayType,
8+
)
9+
10+
enum class EmotionDisplayType {
11+
SINGLE, // 1개 감정이 1위
12+
DUAL, // 2개 감정이 공동 1위
13+
BALANCED, // 3개 이상 감정이 공동 1위
14+
}
15+
16+
fun analyzeEmotions(emotions: List<EmotionModel>): EmotionAnalysisResult {
17+
if (emotions.isEmpty()) {
18+
return EmotionAnalysisResult(emptyList(), EmotionDisplayType.BALANCED)
19+
}
20+
21+
val maxCount = emotions.maxOf { it.count }
22+
val topEmotions = emotions.filter { it.count == maxCount }
23+
24+
val displayType = when (topEmotions.size) {
25+
1 -> EmotionDisplayType.SINGLE
26+
2 -> EmotionDisplayType.DUAL
27+
else -> EmotionDisplayType.BALANCED
28+
}
29+
30+
return EmotionAnalysisResult(topEmotions, displayType)
31+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<resources>
3+
<string name="book_status_before">읽기 전</string>
4+
<string name="book_status_reading">읽는 중</string>
5+
<string name="book_status_completed">독서 완료</string>
6+
<string name="record_sort_page_ascending">페이지순</string>
7+
<string name="record_sort_recent_register">최신 등록순</string>
8+
</resources>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.ninecraft.booket.core.data.api.repository
2+
3+
import com.ninecraft.booket.core.model.HomeModel
4+
5+
interface HomeRepository {
6+
suspend fun getHome(): Result<HomeModel>
7+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ 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
56
import com.ninecraft.booket.core.data.api.repository.RecordRepository
67
import com.ninecraft.booket.core.data.api.repository.UserRepository
78
import com.ninecraft.booket.core.data.impl.repository.DefaultAuthRepository
89
import com.ninecraft.booket.core.data.impl.repository.DefaultBookRepository
10+
import com.ninecraft.booket.core.data.impl.repository.DefaultHomeRepository
911
import com.ninecraft.booket.core.data.impl.repository.DefaultRecordRepository
1012
import com.ninecraft.booket.core.data.impl.repository.DefaultUserRepository
1113
import dagger.Binds
@@ -33,4 +35,8 @@ internal abstract class RepositoryModule {
3335
@Binds
3436
@Singleton
3537
abstract fun bindRecordRepository(defaultRecordRepository: DefaultRecordRepository): RecordRepository
38+
39+
@Binds
40+
@Singleton
41+
abstract fun bindHomeRepository(defaultHomeRepository: DefaultHomeRepository): HomeRepository
3642
}

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

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,24 @@ 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.HomeModel
89
import com.ninecraft.booket.core.model.LibraryBookSummaryModel
910
import com.ninecraft.booket.core.model.LibraryBooksModel
1011
import com.ninecraft.booket.core.model.LibraryModel
1112
import com.ninecraft.booket.core.model.PageInfoModel
13+
import com.ninecraft.booket.core.model.RecentBookModel
1214
import com.ninecraft.booket.core.model.RecordRegisterModel
1315
import com.ninecraft.booket.core.model.UserProfileModel
1416
import com.ninecraft.booket.core.network.response.BookDetailResponse
1517
import com.ninecraft.booket.core.network.response.BookSearchResponse
1618
import com.ninecraft.booket.core.network.response.BookSummary
1719
import com.ninecraft.booket.core.network.response.BookUpsertResponse
20+
import com.ninecraft.booket.core.network.response.HomeResponse
1821
import com.ninecraft.booket.core.network.response.LibraryBookSummary
1922
import com.ninecraft.booket.core.network.response.LibraryBooks
2023
import com.ninecraft.booket.core.network.response.LibraryResponse
2124
import com.ninecraft.booket.core.network.response.PageInfo
25+
import com.ninecraft.booket.core.network.response.RecentBook
2226
import com.ninecraft.booket.core.network.response.RecordRegisterResponse
2327
import com.ninecraft.booket.core.network.response.UserProfileResponse
2428

@@ -55,6 +59,7 @@ internal fun BookSummary.toModel(): BookSummaryModel {
5559
author = author,
5660
publisher = publisher,
5761
coverImageUrl = coverImageUrl,
62+
userBookStatus = userBookStatus,
5863
)
5964
}
6065

@@ -150,3 +155,21 @@ internal fun RecordRegisterResponse.toModel(): RecordRegisterModel {
150155
updatedAt = updatedAt,
151156
)
152157
}
158+
159+
internal fun HomeResponse.toModel(): HomeModel {
160+
return HomeModel(
161+
recentBooks = recentBooks.map { it.toModel() },
162+
)
163+
}
164+
165+
internal fun RecentBook.toModel(): RecentBookModel {
166+
return RecentBookModel(
167+
userBookId = userBookId,
168+
title = title,
169+
author = author,
170+
publisher = publisher,
171+
coverImageUrl = coverImageUrl,
172+
lastRecordedAt = lastRecordedAt,
173+
recordCount = recordCount,
174+
)
175+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.ninecraft.booket.core.data.impl.repository
2+
3+
import com.ninecraft.booket.core.common.utils.runSuspendCatching
4+
import com.ninecraft.booket.core.data.api.repository.HomeRepository
5+
import com.ninecraft.booket.core.data.impl.mapper.toModel
6+
import com.ninecraft.booket.core.network.service.ReedService
7+
import javax.inject.Inject
8+
9+
class DefaultHomeRepository @Inject constructor(
10+
private val service: ReedService,
11+
) : HomeRepository {
12+
override suspend fun getHome() = runSuspendCatching {
13+
service.getHome().toModel()
14+
}
15+
}

0 commit comments

Comments
 (0)