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)