Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.ninecraft.booket.core.data.api.repository

import com.ninecraft.booket.core.model.AutoLoginState
import com.ninecraft.booket.core.model.UserState
import com.ninecraft.booket.core.model.state.AutoLoginState
import com.ninecraft.booket.core.model.state.UserState
import kotlinx.coroutines.flow.Flow

interface AuthRepository {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.ninecraft.booket.core.data.api.repository

import com.ninecraft.booket.core.model.ReadingRecordModelV2
import com.ninecraft.booket.core.model.ReadingRecordModel
import com.ninecraft.booket.core.model.ReadingRecordsModel

interface RecordRepository {
Expand All @@ -11,18 +11,18 @@ interface RecordRepository {
review: String,
primaryEmotion: String,
detailEmotionTagIds: List<String>,
): Result<ReadingRecordModelV2>
): Result<ReadingRecordModel>

suspend fun getReadingRecords(
userBookId: String,
sort: String,
page: Int,
size: Int,
): Result<ReadingRecordsModel> // TODO: V2로 변경 필요
): Result<ReadingRecordsModel>

suspend fun getRecordDetail(
readingRecordId: String,
): Result<ReadingRecordModelV2>
): Result<ReadingRecordModel>

suspend fun editRecord(
readingRecordId: String,
Expand All @@ -31,7 +31,7 @@ interface RecordRepository {
review: String,
primaryEmotion: String,
detailEmotionTagIds: List<String>,
): Result<ReadingRecordModelV2>
): Result<ReadingRecordModel>

suspend fun deleteRecord(
readingRecordId: String,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.ninecraft.booket.core.data.api.repository

import com.ninecraft.booket.core.model.OnboardingState
import com.ninecraft.booket.core.model.state.OnboardingState
import com.ninecraft.booket.core.model.TermsAgreementModel
import com.ninecraft.booket.core.model.UserProfileModel
import kotlinx.coroutines.flow.Flow
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import com.ninecraft.booket.core.model.BookSearchModel
import com.ninecraft.booket.core.model.BookSummaryModel
import com.ninecraft.booket.core.model.BookUpsertModel
import com.ninecraft.booket.core.model.DetailEmotionModel
import com.ninecraft.booket.core.model.Emotion
import com.ninecraft.booket.core.model.EmotionCode
import com.ninecraft.booket.core.model.EmotionGroupModel
import com.ninecraft.booket.core.model.EmotionGroupsModel
Expand All @@ -18,10 +17,8 @@ import com.ninecraft.booket.core.model.LibraryModel
import com.ninecraft.booket.core.model.PageInfoModel
import com.ninecraft.booket.core.model.PrimaryEmotionModel
import com.ninecraft.booket.core.model.ReadingRecordModel
import com.ninecraft.booket.core.model.ReadingRecordModelV2
import com.ninecraft.booket.core.model.ReadingRecordsModel
import com.ninecraft.booket.core.model.RecentBookModel
import com.ninecraft.booket.core.model.RecordRegisterModel
import com.ninecraft.booket.core.model.SeedModel
import com.ninecraft.booket.core.model.TermsAgreementModel
import com.ninecraft.booket.core.model.UserProfileModel
Expand All @@ -42,10 +39,8 @@ import com.ninecraft.booket.core.network.response.LibraryResponse
import com.ninecraft.booket.core.network.response.PageInfo
import com.ninecraft.booket.core.network.response.PrimaryEmotion
import com.ninecraft.booket.core.network.response.ReadingRecord
import com.ninecraft.booket.core.network.response.ReadingRecordV2
import com.ninecraft.booket.core.network.response.ReadingRecordsResponse
import com.ninecraft.booket.core.network.response.RecentBook
import com.ninecraft.booket.core.network.response.RecordRegisterResponse
import com.ninecraft.booket.core.network.response.SeedResponse
import com.ninecraft.booket.core.network.response.TermsAgreementResponse
import com.ninecraft.booket.core.network.response.UserProfileResponse
Expand Down Expand Up @@ -217,21 +212,9 @@ internal fun DetailEmotion.toModel(): DetailEmotionModel {
)
}

internal fun RecordRegisterResponse.toModel(): RecordRegisterModel {
return RecordRegisterModel(
id = id,
userBookId = userBookId,
pageNumber = pageNumber,
quote = quote,
emotionTags = emotionTags,
review = review ?: "",
createdAt = createdAt,
updatedAt = updatedAt,
)
}

internal fun ReadingRecordsResponse.toModel(): ReadingRecordsModel {
return ReadingRecordsModel(
representativeEmotion = representativeEmotion?.toModel(),
lastPage = lastPage,
totalResults = totalResults,
startIndex = startIndex,
Expand All @@ -242,23 +225,6 @@ internal fun ReadingRecordsResponse.toModel(): ReadingRecordsModel {

internal fun ReadingRecord.toModel(): ReadingRecordModel {
return ReadingRecordModel(
id = id,
userBookId = userBookId,
pageNumber = pageNumber,
quote = quote,
review = review ?: "",
emotionTags = emotionTags,
createdAt = createdAt,
updatedAt = updatedAt,
bookTitle = bookTitle ?: "",
bookPublisher = bookPublisher ?: "",
bookCoverImageUrl = bookCoverImageUrl ?: "",
author = author ?: "",
)
}

internal fun ReadingRecordV2.toModel(): ReadingRecordModelV2 {
return ReadingRecordModelV2(
id = id,
userBookId = userBookId,
pageNumber = pageNumber,
Expand Down Expand Up @@ -309,9 +275,8 @@ internal fun SeedResponse.toModel(): SeedModel {
}

internal fun Category.toEmotionModel(): EmotionModel? {
val emotion = Emotion.fromDisplayName(name) ?: return null
return EmotionModel(
name = emotion,
code = EmotionCode.fromDisplayName(name) ?: return null,
count = count,
)
Comment on lines 277 to 281
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

알 수 없는 감정명이 들어오면 통계가 누락될 수 있습니다.
fromDisplayName 실패 시 null을 반환해 mapNotNull에서 제거되므로 새로운 감정(또는 “기타”)이 통째로 빠질 수 있습니다. 최소한 OTHER로 폴백하는 편이 안전합니다.

✅ 폴백 처리 예시
- return EmotionModel(
-     code = EmotionCode.fromDisplayName(name) ?: return null,
-     count = count,
- )
+ val code = EmotionCode.fromDisplayName(name) ?: EmotionCode.OTHER
+ return EmotionModel(
+     code = code,
+     count = count,
+ )
🤖 Prompt for AI Agents
In
`@core/data/impl/src/main/kotlin/com/ninecraft/booket/core/data/impl/mapper/ResponseToModel.kt`
around lines 277 - 281, Category.toEmotionModel() currently returns null when
EmotionCode.fromDisplayName(name) fails, which causes mapNotNull to drop that
category and lose stats; change this to fall back to a default/OTHER EmotionCode
(e.g., EmotionCode.OTHER) instead of returning null and construct the
EmotionModel with that fallback so unknown names are aggregated under OTHER;
update references in EmotionModel and tests if any to expect OTHER for unknown
display names.

}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package com.ninecraft.booket.core.data.impl.repository
import com.ninecraft.booket.core.common.utils.runSuspendCatching
import com.ninecraft.booket.core.data.api.repository.AuthRepository
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
import com.ninecraft.booket.core.model.AutoLoginState
import com.ninecraft.booket.core.model.UserState
import com.ninecraft.booket.core.di.DataScope
import com.ninecraft.booket.core.model.state.AutoLoginState
import com.ninecraft.booket.core.model.state.UserState
import com.ninecraft.booket.core.network.request.LoginRequest
import com.ninecraft.booket.core.network.service.ReedService
import dev.zacsweers.metro.Inject
import com.ninecraft.booket.core.di.DataScope
import dev.zacsweers.metro.SingleIn
import kotlinx.coroutines.flow.map

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.ninecraft.booket.core.datastore.api.datasource

import com.ninecraft.booket.core.model.OnboardingState
import com.ninecraft.booket.core.model.state.OnboardingState
import kotlinx.coroutines.flow.Flow

interface OnboardingDataSource {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import androidx.datastore.preferences.core.edit
import com.ninecraft.booket.core.datastore.api.datasource.OnboardingDataSource
import com.ninecraft.booket.core.model.OnboardingState
import com.ninecraft.booket.core.datastore.impl.di.OnboardingDataStore
import com.ninecraft.booket.core.datastore.impl.util.handleIOException
import dev.zacsweers.metro.Inject
import com.ninecraft.booket.core.di.DataScope
import com.ninecraft.booket.core.model.state.OnboardingState
import dev.zacsweers.metro.Inject
import dev.zacsweers.metro.SingleIn
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ package com.ninecraft.booket.core.designsystem

import androidx.compose.ui.graphics.Color
import com.ninecraft.booket.core.designsystem.theme.Blue300
import com.ninecraft.booket.core.designsystem.theme.EtcBgColor
import com.ninecraft.booket.core.designsystem.theme.EtcTextColor
import com.ninecraft.booket.core.designsystem.theme.OtherBgColor
import com.ninecraft.booket.core.designsystem.theme.OtherTextColor
import com.ninecraft.booket.core.designsystem.theme.InsightBgColor
import com.ninecraft.booket.core.designsystem.theme.InsightTextColor
import com.ninecraft.booket.core.designsystem.theme.JoyBgColor
Expand All @@ -16,34 +16,33 @@ import com.ninecraft.booket.core.designsystem.theme.Violet300
import com.ninecraft.booket.core.designsystem.theme.WarmthBgColor
import com.ninecraft.booket.core.designsystem.theme.WarmthTextColor
import com.ninecraft.booket.core.designsystem.theme.Yellow300
import com.ninecraft.booket.core.model.Emotion
import com.ninecraft.booket.core.model.EmotionCode

val Emotion.bgColor: Color
val EmotionCode.bgColor: Color
get() = when (this) {
Emotion.WARM -> WarmthBgColor
Emotion.JOY -> JoyBgColor
Emotion.SAD -> SadnessBgColor
Emotion.INSIGHT -> InsightBgColor
Emotion.ETC -> EtcBgColor
EmotionCode.WARMTH -> WarmthBgColor
EmotionCode.JOY -> JoyBgColor
EmotionCode.SADNESS -> SadnessBgColor
EmotionCode.INSIGHT -> InsightBgColor
EmotionCode.OTHER -> OtherBgColor
}

val Emotion.textColor: Color
val EmotionCode.textColor: Color
get() = when (this) {
Emotion.WARM -> WarmthTextColor
Emotion.JOY -> JoyTextColor
Emotion.SAD -> SadnessTextColor
Emotion.INSIGHT -> InsightTextColor
Emotion.ETC -> EtcTextColor
EmotionCode.WARMTH -> WarmthTextColor
EmotionCode.JOY -> JoyTextColor
EmotionCode.SADNESS -> SadnessTextColor
EmotionCode.INSIGHT -> InsightTextColor
EmotionCode.OTHER -> OtherTextColor
}

val Emotion.ratioBarColor: Color
val EmotionCode.ratioBarColor: Color
get() = when (this) {
Emotion.WARM -> Yellow300
Emotion.JOY -> Orange300
Emotion.SAD -> Blue300
Emotion.INSIGHT -> Violet300
Emotion.ETC -> Neutral300
EmotionCode.WARMTH -> Yellow300
EmotionCode.JOY -> Orange300
EmotionCode.SADNESS -> Blue300
EmotionCode.INSIGHT -> Violet300
EmotionCode.OTHER -> Neutral300
}

val EmotionCode.graphicRes: Int
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ val InsightTextColor = Color(0xFF9A55E4)
val InsightBgColor = Color(0xFFF3E8FF)
val SadnessTextColor = Color(0xFF2872E9)
val SadnessBgColor = Color(0xFFE1ECFF)
val EtcTextColor = Color(0xFF737373)
val EtcBgColor = Color(0xFFF5F5F5)
val OtherTextColor = Color(0xFF737373)
val OtherBgColor = Color(0xFFF5F5F5)

@Immutable
data class ReedColorScheme(
Expand Down
37 changes: 0 additions & 37 deletions core/designsystem/stability/designsystem.stability
Original file line number Diff line number Diff line change
Expand Up @@ -232,40 +232,3 @@ public fun com.ninecraft.booket.core.designsystem.component.textfield.ReedTextFi
- borderStroke: STABLE (marked @Stable or @Immutable)
- searchIconTint: STABLE (marked @Stable or @Immutable)

@Composable
public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme(content: @[Composable] androidx.compose.runtime.internal.ComposableFunction0<kotlin.Unit>): kotlin.Unit
skippable: true
restartable: true
params:
- content: STABLE (composable function type)

@Composable
public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.border(): com.ninecraft.booket.core.designsystem.theme.ReedBorder
skippable: true
restartable: true
params:

@Composable
public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.colors(): com.ninecraft.booket.core.designsystem.theme.ReedColorScheme
skippable: true
restartable: true
params:

@Composable
public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.radius(): com.ninecraft.booket.core.designsystem.theme.ReedRadius
skippable: true
restartable: true
params:

@Composable
public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.spacing(): com.ninecraft.booket.core.designsystem.theme.ReedSpacing
skippable: true
restartable: true
params:

@Composable
public fun com.ninecraft.booket.core.designsystem.theme.ReedTheme.typography(): com.ninecraft.booket.core.designsystem.theme.ReedTypography
skippable: true
restartable: true
params:

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.ninecraft.booket.core.model

import androidx.compose.runtime.Stable
import androidx.compose.runtime.Immutable

@Stable
@Immutable
data class BookDetailModel(
val version: String = "",
val title: String = "",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package com.ninecraft.booket.core.model

import androidx.compose.runtime.Stable
import androidx.compose.runtime.Immutable

@Stable
@Immutable
data class BookSearchModel(
val version: String = "",
val title: String = "",
Expand All @@ -17,7 +17,7 @@ data class BookSearchModel(
val books: List<BookSummaryModel> = emptyList(),
)

@Stable
@Immutable
data class BookSummaryModel(
val isbn13: String = "",
val title: String = "",
Expand Down
Loading
Loading