Skip to content

Commit baca0b9

Browse files
committed
Merge branch 'develop' into BOOK-161-feature/#64
# Conflicts: # feature/search/src/main/kotlin/com/ninecraft/booket/feature/search/SearchUi.kt
2 parents 50132ee + 7ca3f8b commit baca0b9

File tree

31 files changed

+417
-65
lines changed

31 files changed

+417
-65
lines changed

app/build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,19 @@ dependencies {
4949

5050
projects.feature.home,
5151
projects.feature.library,
52-
projects.feature.main,
5352
projects.feature.login,
53+
projects.feature.main,
54+
projects.feature.screens,
5455
projects.feature.search,
5556
projects.feature.settings,
5657
projects.feature.webview,
5758
projects.feature.detail,
5859

5960
libs.androidx.activity.compose,
6061
libs.androidx.startup,
61-
libs.logger,
62+
libs.coil.compose,
6263
libs.kakao.auth,
64+
libs.logger,
6365

6466
libs.bundles.circuit,
6567
)
Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,24 @@
11
package com.ninecraft.booket
22

33
import android.app.Application
4+
import coil.ImageLoader
5+
import coil.ImageLoaderFactory
6+
import coil.disk.DiskCache
7+
import coil.util.DebugLogger
48
import dagger.hilt.android.HiltAndroidApp
59

610
@HiltAndroidApp
7-
class BooketApplication : Application()
11+
class BooketApplication : Application(), ImageLoaderFactory {
12+
override fun newImageLoader(): ImageLoader {
13+
return ImageLoader.Builder(this)
14+
.diskCache {
15+
DiskCache.Builder()
16+
.directory(cacheDir.resolve("image_cache"))
17+
.maxSizeBytes(10 * 1024 * 1024)
18+
.build()
19+
}
20+
.logger(DebugLogger())
21+
.respectCacheHeaders(false)
22+
.build()
23+
}
24+
}

core/data/api/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies {
1212
implementations(
1313
projects.core.model,
1414

15+
libs.kotlinx.coroutines.core,
1516
libs.logger,
1617
)
1718
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,19 @@ 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 kotlinx.coroutines.flow.Flow
67
import com.ninecraft.booket.core.model.LibraryModel
78

89
interface BookRepository {
10+
val recentSearches: Flow<List<String>>
11+
912
suspend fun searchBook(
1013
query: String,
1114
start: Int,
1215
): Result<BookSearchModel>
1316

17+
suspend fun removeRecentSearch(query: String)
18+
1419
suspend fun getBookDetail(itemId: String): Result<BookDetailModel>
1520

1621
suspend fun upsertBook(

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.ninecraft.booket.core.data.impl.repository
22

33
import com.ninecraft.booket.core.common.utils.runSuspendCatching
44
import com.ninecraft.booket.core.data.api.repository.AuthRepository
5-
import com.ninecraft.booket.core.datastore.api.datasource.TokenPreferencesDataSource
5+
import com.ninecraft.booket.core.datastore.api.datasource.TokenDataSource
66
import com.ninecraft.booket.core.network.request.LoginRequest
77
import com.ninecraft.booket.core.network.service.ReedService
88
import javax.inject.Inject
@@ -11,7 +11,7 @@ private const val KAKAO_PROVIDER_TYPE = "KAKAO"
1111

1212
internal class DefaultAuthRepository @Inject constructor(
1313
private val service: ReedService,
14-
private val tokenDatasource: TokenPreferencesDataSource,
14+
private val tokenDatasource: TokenDataSource,
1515
) : AuthRepository {
1616
override suspend fun login(accessToken: String) = runSuspendCatching {
1717
val response = service.login(

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,32 @@ package com.ninecraft.booket.core.data.impl.repository
33
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
6+
import com.ninecraft.booket.core.datastore.api.datasource.RecentSearchDataSource
67
import com.ninecraft.booket.core.network.request.BookUpsertRequest
78
import com.ninecraft.booket.core.network.service.ReedService
89
import javax.inject.Inject
910

1011
internal class DefaultBookRepository @Inject constructor(
1112
private val service: ReedService,
13+
private val dataSource: RecentSearchDataSource,
1214
) : BookRepository {
15+
override val recentSearches = dataSource.recentSearches
16+
1317
override suspend fun searchBook(
1418
query: String,
1519
start: Int,
1620
) = runSuspendCatching {
17-
service.searchBook(
21+
val result = service.searchBook(
1822
query = query,
1923
start = start,
2024
).toModel()
25+
26+
dataSource.addRecentSearch(query)
27+
result
28+
}
29+
30+
override suspend fun removeRecentSearch(query: String) {
31+
dataSource.removeRecentSearch(query)
2132
}
2233

2334
override suspend fun getBookDetail(itemId: String) = runSuspendCatching {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.ninecraft.booket.core.datastore.api.datasource
2+
3+
import kotlinx.coroutines.flow.Flow
4+
5+
interface RecentSearchDataSource {
6+
val recentSearches: Flow<List<String>>
7+
suspend fun addRecentSearch(query: String)
8+
suspend fun removeRecentSearch(query: String)
9+
suspend fun clearRecentSearches()
10+
}

core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/TokenPreferencesDataSource.kt renamed to core/datastore/api/src/main/kotlin/com/ninecraft/booket/core/datastore/api/datasource/TokenDataSource.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.ninecraft.booket.core.datastore.api.datasource
22

33
import kotlinx.coroutines.flow.Flow
44

5-
interface TokenPreferencesDataSource {
5+
interface TokenDataSource {
66
val accessToken: Flow<String>
77
val refreshToken: Flow<String>
88
suspend fun getAccessToken(): String

core/datastore/impl/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
plugins {
44
alias(libs.plugins.booket.android.library)
55
alias(libs.plugins.booket.android.hilt)
6+
alias(libs.plugins.booket.kotlin.library.serialization)
67
}
78

89
android {

core/datastore/impl/src/androidTest/java/com/ninecraft/booket/core/datastore/impl/TokenPreferenceDataSourceTest.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import androidx.datastore.preferences.core.PreferenceDataStoreFactory
55
import androidx.datastore.preferences.core.Preferences
66
import androidx.datastore.preferences.core.stringPreferencesKey
77
import androidx.test.ext.junit.runners.AndroidJUnit4
8-
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenPreferencesDataSource
8+
import com.ninecraft.booket.core.datastore.impl.datasource.DefaultTokenDataSource
99
import com.ninecraft.booket.core.datastore.impl.security.CryptoManager
1010
import kotlinx.coroutines.CoroutineScope
1111
import kotlinx.coroutines.Dispatchers
@@ -26,7 +26,7 @@ import kotlin.io.path.createTempDirectory
2626
@RunWith(AndroidJUnit4::class)
2727
class TokenPreferenceDataSourceTest {
2828
private lateinit var dataStore: DataStore<Preferences>
29-
private lateinit var dataSource: DefaultTokenPreferencesDataSource
29+
private lateinit var dataSource: DefaultTokenDataSource
3030
private lateinit var cryptoManager: CryptoManager
3131
private lateinit var tempFile: File
3232

@@ -41,7 +41,7 @@ class TokenPreferenceDataSourceTest {
4141
)
4242

4343
cryptoManager = CryptoManager()
44-
dataSource = DefaultTokenPreferencesDataSource(dataStore, cryptoManager)
44+
dataSource = DefaultTokenDataSource(dataStore, cryptoManager)
4545
}
4646

4747
@After

0 commit comments

Comments
 (0)