Skip to content

Commit 84e2e1b

Browse files
committed
Merge branch 'develop' into BOOK-151-feature/#57
# Conflicts: # core/data/api/src/main/kotlin/com/ninecraft/booket/core/data/api/repository/BookRepository.kt # feature/library/src/main/kotlin/com/ninecraft/booket/feature/library/LibraryUiState.kt
2 parents f087216 + ef92249 commit 84e2e1b

File tree

38 files changed

+963
-238
lines changed

38 files changed

+963
-238
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ dependencies {
5454
projects.feature.screens,
5555
projects.feature.search,
5656
projects.feature.settings,
57+
projects.feature.webview,
5758

5859
libs.androidx.activity.compose,
5960
libs.androidx.startup,

app/src/main/kotlin/com/ninecraft/booket/di/CircuitModule.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ abstract class CircuitModule {
2828
): Circuit = Circuit.Builder()
2929
.addPresenterFactories(presenterFactories)
3030
.addUiFactories(uiFactories)
31+
// .setAnimatedNavDecoratorFactory(CrossFadeNavDecoratorFactory())
3132
.build()
3233
}
3334
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.ninecraft.booket.di
2+
3+
import androidx.compose.animation.AnimatedContentTransitionScope
4+
import androidx.compose.animation.ContentTransform
5+
import androidx.compose.animation.core.tween
6+
import androidx.compose.animation.fadeIn
7+
import androidx.compose.animation.fadeOut
8+
import androidx.compose.animation.togetherWith
9+
import com.slack.circuit.backstack.NavArgument
10+
import com.slack.circuit.foundation.NavigatorDefaults
11+
import com.slack.circuit.foundation.animation.AnimatedNavDecorator
12+
import com.slack.circuit.foundation.animation.AnimatedNavEvent
13+
import com.slack.circuit.foundation.animation.AnimatedNavState
14+
15+
data class CrossFadeNavDecoratorFactory(val durationMillis: Int = 300) :
16+
AnimatedNavDecorator.Factory {
17+
override fun <T : NavArgument> create(): AnimatedNavDecorator<T, *> =
18+
CrossFadeNavDecorator(durationMillis)
19+
}
20+
21+
class CrossFadeNavDecorator<T : NavArgument>(private val durationMillis: Int) :
22+
AnimatedNavDecorator<T, NavigatorDefaults.DefaultDecorator.DefaultAnimatedState<T>> by NavigatorDefaults.DefaultDecorator<T>() {
23+
24+
override fun AnimatedContentTransitionScope<AnimatedNavState>.transitionSpec(
25+
animatedNavEvent: AnimatedNavEvent,
26+
): ContentTransform {
27+
return fadeIn(tween(durationMillis)) togetherWith fadeOut(tween(durationMillis))
28+
}
29+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
package com.ninecraft.booket.core.common.constants
2+
3+
enum class WebViewConstants(val url: String, val title: String) {
4+
PRIVACY_POLICY("https://www.google.com", "개인정보처리방침"),
5+
TERMS_OF_SERVICE("https://m.naver.com", "이용약관"),
6+
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import com.ninecraft.booket.core.model.BookDetailModel
44
import com.ninecraft.booket.core.model.BookSearchModel
55
import com.ninecraft.booket.core.model.BookUpsertModel
66
import kotlinx.coroutines.flow.Flow
7+
import com.ninecraft.booket.core.model.LibraryModel
78

89
interface BookRepository {
910
val recentSearches: Flow<List<String>>
@@ -21,4 +22,6 @@ interface BookRepository {
2122
bookIsbn: String,
2223
bookStatus: String,
2324
): Result<BookUpsertModel>
25+
26+
suspend fun getLibrary(): Result<LibraryModel>
2427
}

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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@ 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.LibraryModel
89
import com.ninecraft.booket.core.model.UserProfileModel
910
import com.ninecraft.booket.core.network.response.BookDetailResponse
1011
import com.ninecraft.booket.core.network.response.BookSearchResponse
1112
import com.ninecraft.booket.core.network.response.BookSummary
1213
import com.ninecraft.booket.core.network.response.BookUpsertResponse
14+
import com.ninecraft.booket.core.network.response.LibraryResponse
1315
import com.ninecraft.booket.core.network.response.UserProfileResponse
1416

1517
internal fun UserProfileResponse.toModel(): UserProfileModel {
@@ -84,3 +86,18 @@ internal fun BookUpsertResponse.toModel(): BookUpsertModel {
8486
updatedAt = updatedAt,
8587
)
8688
}
89+
90+
internal fun LibraryResponse.toModel(): LibraryModel {
91+
return LibraryModel(
92+
userBookId = userBookId,
93+
userId = userId,
94+
bookIsbn = bookIsbn,
95+
bookTitle = bookTitle,
96+
bookAuthor = bookAuthor,
97+
status = status,
98+
coverImageUrl = coverImageUrl,
99+
publisher = publisher,
100+
createdAt = createdAt,
101+
updatedAt = updatedAt,
102+
)
103+
}

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,8 @@ internal class DefaultBookRepository @Inject constructor(
3838
override suspend fun upsertBook(bookIsbn: String, bookStatus: String) = runSuspendCatching {
3939
service.upsertBook(BookUpsertRequest(bookIsbn, bookStatus)).toModel()
4040
}
41+
42+
override suspend fun getLibrary() = runSuspendCatching {
43+
service.getLibrary().toModel()
44+
}
4145
}

core/designsystem/src/main/kotlin/com/ninecraft/booket/core/designsystem/component/appbar/ReedTopAppBar.kt

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import androidx.compose.foundation.background
55
import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Row
77
import androidx.compose.foundation.layout.Spacer
8-
import androidx.compose.foundation.layout.fillMaxHeight
98
import androidx.compose.foundation.layout.fillMaxWidth
109
import androidx.compose.foundation.layout.height
10+
import androidx.compose.foundation.layout.padding
1111
import androidx.compose.foundation.layout.width
1212
import androidx.compose.material3.Icon
1313
import androidx.compose.material3.IconButton
@@ -37,25 +37,23 @@ fun ReedTopAppBar(
3737
Row(
3838
modifier = modifier
3939
.fillMaxWidth()
40-
.height(56.dp)
41-
.background(color = White),
40+
.height(60.dp)
41+
.background(color = White)
42+
.padding(horizontal = ReedTheme.spacing.spacing2),
4243
horizontalArrangement = Arrangement.Start,
4344
verticalAlignment = Alignment.CenterVertically,
4445
) {
4546
if (startIconRes != null) {
4647
IconButton(
4748
onClick = { startIconOnClick() },
48-
modifier = Modifier
49-
.fillMaxHeight()
50-
.width(72.dp),
5149
) {
5250
Icon(
5351
painter = painterResource(id = startIconRes),
5452
contentDescription = startIconDescription,
5553
)
5654
}
5755
} else {
58-
Spacer(modifier = Modifier.width(72.dp))
56+
Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing12))
5957
}
6058

6159
Text(
@@ -68,17 +66,14 @@ fun ReedTopAppBar(
6866
if (endIconRes != null) {
6967
IconButton(
7068
onClick = { endIconOnClick() },
71-
modifier = Modifier
72-
.fillMaxHeight()
73-
.width(72.dp),
7469
) {
7570
Icon(
7671
painter = painterResource(id = endIconRes),
7772
contentDescription = endIconDescription,
7873
)
7974
}
8075
} else {
81-
Spacer(modifier = Modifier.width(72.dp))
76+
Spacer(modifier = Modifier.width(ReedTheme.spacing.spacing12))
8277
}
8378
}
8479
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.ninecraft.booket.core.model
2+
3+
import androidx.compose.runtime.Stable
4+
5+
@Stable
6+
data class LibraryModel(
7+
val userBookId: String = "",
8+
val userId: String = "",
9+
val bookIsbn: String = "",
10+
val bookTitle: String = "",
11+
val bookAuthor: String = "",
12+
val status: String = "",
13+
val coverImageUrl: String = "",
14+
val publisher: String = "",
15+
val createdAt: String = "",
16+
val updatedAt: String = "",
17+
)
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
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 LibraryResponse(
8+
@SerialName("userBookId")
9+
val userBookId: String,
10+
@SerialName("userId")
11+
val userId: String,
12+
@SerialName("bookIsbn")
13+
val bookIsbn: String,
14+
@SerialName("bookTitle")
15+
val bookTitle: String,
16+
@SerialName("bookAuthor")
17+
val bookAuthor: String,
18+
@SerialName("status")
19+
val status: String,
20+
@SerialName("coverImageUrl")
21+
val coverImageUrl: String,
22+
@SerialName("publisher")
23+
val publisher: String,
24+
@SerialName("createdAt")
25+
val createdAt: String,
26+
@SerialName("updatedAt")
27+
val updatedAt: String,
28+
)

0 commit comments

Comments
 (0)