diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5434df8c2..e2a8da79a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -84,6 +84,7 @@ dependencies { implementation(projects.core.ui) implementation(projects.core.designsystem) implementation(projects.core.data) + implementation(projects.core.domain.di) implementation(projects.core.model) implementation(projects.core.analytics) implementation(projects.sync.work) diff --git a/core/domain/api/src/main/AndroidManifest.xml b/core/domain/api/src/main/AndroidManifest.xml new file mode 100644 index 000000000..51d0cfc2e --- /dev/null +++ b/core/domain/api/src/main/AndroidManifest.xml @@ -0,0 +1,17 @@ + + + \ No newline at end of file diff --git a/core/domain/api/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt b/core/domain/api/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt new file mode 100644 index 000000000..b3f88439e --- /dev/null +++ b/core/domain/api/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt @@ -0,0 +1,29 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.domain + +import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult +import kotlinx.coroutines.flow.Flow + +/** + * A use case which returns the searched contents matched with the search query. + */ +interface GetSearchContentsUseCase { + operator fun invoke( + searchQuery: String, + ): Flow +} \ No newline at end of file diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts index 191877459..b0274f8c5 100644 --- a/core/domain/build.gradle.kts +++ b/core/domain/build.gradle.kts @@ -26,6 +26,7 @@ android { dependencies { api(projects.core.data) api(projects.core.model) + api(projects.core.domain.api) implementation(libs.javax.inject) diff --git a/core/domain/di/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/DomainModule.kt b/core/domain/di/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/DomainModule.kt index 2cf72a72d..1b24a48d0 100644 --- a/core/domain/di/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/DomainModule.kt +++ b/core/domain/di/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/DomainModule.kt @@ -17,9 +17,15 @@ package com.google.samples.apps.nowinandroid.core.domain import dagger.Module +import dagger.Binds import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent @InstallIn(SingletonComponent::class) @Module -interface DomainModule +interface DomainModule { + @Binds + fun bindGetSearchContentsUseCase( + impl: DefaultGetSearchContentsUseCase + ): GetSearchContentsUseCase + \ No newline at end of file diff --git a/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt index d1065e87c..66169eb2a 100644 --- a/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt +++ b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt @@ -27,15 +27,12 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.combine import javax.inject.Inject -/** - * A use case which returns the searched contents matched with the search query. - */ -class GetSearchContentsUseCase @Inject constructor( +class DefaultGetSearchContentsUseCase @Inject constructor( private val searchContentsRepository: SearchContentsRepository, private val userDataRepository: UserDataRepository, -) { +) : GetSearchContentsUseCase { - operator fun invoke( + override operator fun invoke( searchQuery: String, ): Flow = searchContentsRepository.searchContents(searchQuery)