diff --git a/app/src/main/java/com/ftw/hometerview/di/api/APIModule.kt b/app/src/main/java/com/ftw/hometerview/di/api/APIModule.kt index c47fc91..37a03b2 100644 --- a/app/src/main/java/com/ftw/hometerview/di/api/APIModule.kt +++ b/app/src/main/java/com/ftw/hometerview/di/api/APIModule.kt @@ -2,13 +2,14 @@ package com.ftw.hometerview.di.api import com.ftw.data.remote.api.BuildingReviewsAPI import com.ftw.data.remote.api.LoginAPI +import com.ftw.data.remote.api.SearchAPI import com.ftw.data.remote.api.review.ReviewAPI import dagger.Module import dagger.Provides import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent -import retrofit2.Retrofit import javax.inject.Singleton +import retrofit2.Retrofit @Module @InstallIn(SingletonComponent::class) @@ -31,4 +32,10 @@ class APIModule { fun provideBuildingReviewsApi(retrofit: Retrofit): BuildingReviewsAPI { return retrofit.create(BuildingReviewsAPI::class.java) } + + @Provides + @Singleton + fun provideSearchApi(retrofit: Retrofit): SearchAPI { + return retrofit.create(SearchAPI::class.java) + } } diff --git a/app/src/main/java/com/ftw/hometerview/di/api/NetworkModule.kt b/app/src/main/java/com/ftw/hometerview/di/api/NetworkModule.kt index ee6c3cf..b69233f 100644 --- a/app/src/main/java/com/ftw/hometerview/di/api/NetworkModule.kt +++ b/app/src/main/java/com/ftw/hometerview/di/api/NetworkModule.kt @@ -19,8 +19,8 @@ import javax.inject.Singleton class NetworkModule { companion object { - private const val DEBUG_BASE_URL = "http://13.125.75.159:8080/" - private const val RELEASE_BASE_URL = "http://13.125.75.159:8080/" + private const val DEBUG_BASE_URL = "http://3.36.37.15/:8080/" + private const val RELEASE_BASE_URL = "http://3.36.37.15/:8080/" } @Provides diff --git a/app/src/main/java/com/ftw/hometerview/di/datasource/SearchDataSourceModule.kt b/app/src/main/java/com/ftw/hometerview/di/datasource/SearchDataSourceModule.kt new file mode 100644 index 0000000..82bc093 --- /dev/null +++ b/app/src/main/java/com/ftw/hometerview/di/datasource/SearchDataSourceModule.kt @@ -0,0 +1,21 @@ +package com.ftw.hometerview.di.datasource + +import com.ftw.data.datasource.search.SearchDataSource +import com.ftw.data.remote.api.SearchAPI +import com.ftw.data.remote.datasource.search.SearchRemoteDataSource +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +class SearchDataSourceModule { + + @Provides + @Singleton + fun provideSearchDataSource(searchAPI: SearchAPI): SearchDataSource { + return SearchRemoteDataSource(searchAPI) + } +} diff --git a/app/src/main/java/com/ftw/hometerview/di/repository/SearchRepositoryModule.kt b/app/src/main/java/com/ftw/hometerview/di/repository/SearchRepositoryModule.kt new file mode 100644 index 0000000..1e484f1 --- /dev/null +++ b/app/src/main/java/com/ftw/hometerview/di/repository/SearchRepositoryModule.kt @@ -0,0 +1,21 @@ +package com.ftw.hometerview.di.repository + +import com.ftw.data.datasource.search.SearchDataSource +import com.ftw.data.repository.search.SearchRepositoryImpl +import com.ftw.domain.repository.search.SearchRepository +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +class SearchRepositoryModule { + + @Provides + @Singleton + fun provideSearchRepository(dataSource: SearchDataSource): SearchRepository { + return SearchRepositoryImpl(dataSource) + } +} diff --git a/app/src/main/java/com/ftw/hometerview/di/ui/CreateReviewFragmentViewModelModule.kt b/app/src/main/java/com/ftw/hometerview/di/ui/CreateReviewFragmentViewModelModule.kt index 34df549..da62069 100644 --- a/app/src/main/java/com/ftw/hometerview/di/ui/CreateReviewFragmentViewModelModule.kt +++ b/app/src/main/java/com/ftw/hometerview/di/ui/CreateReviewFragmentViewModelModule.kt @@ -1,6 +1,6 @@ package com.ftw.hometerview.di.ui -import com.ftw.domain.usecase.address.GetAddressUseCase +import com.ftw.domain.usecase.search.GetSearchedBuildingAddressesUseCase import com.ftw.hometerview.dispatcher.Dispatcher import com.ftw.hometerview.ui.review.first.CreateReviewFirstStepInputAddressViewModel import com.ftw.hometerview.ui.review.first.CreateReviewFirstStepSelectFloorViewModel @@ -20,11 +20,11 @@ class CreateReviewFragmentViewModelModule { @FragmentScoped fun provideCreateReviewFirstStepInputAddressViewModel( dispatcher: Dispatcher, - getAddressUseCase: GetAddressUseCase + getSearchedBuildingAddressesUseCase: GetSearchedBuildingAddressesUseCase ): CreateReviewFirstStepInputAddressViewModel { return CreateReviewFirstStepInputAddressViewModel( dispatcher, - getAddressUseCase + getSearchedBuildingAddressesUseCase ) } diff --git a/app/src/main/java/com/ftw/hometerview/di/usecase/AddressUseCaseModule.kt b/app/src/main/java/com/ftw/hometerview/di/usecase/AddressUseCaseModule.kt deleted file mode 100644 index fcbabc0..0000000 --- a/app/src/main/java/com/ftw/hometerview/di/usecase/AddressUseCaseModule.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.ftw.hometerview.di.usecase - -import com.ftw.domain.usecase.address.GetAddressUseCase -import com.ftw.domain.usecase.address.GetAddressUseCaseImpl -import dagger.Module -import dagger.Provides -import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton - -@Module -@InstallIn(SingletonComponent::class) -class AddressUseCaseModule { - - @Provides - @Singleton - fun provideGetAddressUseCase(): GetAddressUseCase { - return GetAddressUseCaseImpl() - } -} diff --git a/app/src/main/java/com/ftw/hometerview/di/usecase/SearchUseCaseModule.kt b/app/src/main/java/com/ftw/hometerview/di/usecase/SearchUseCaseModule.kt new file mode 100644 index 0000000..2744cba --- /dev/null +++ b/app/src/main/java/com/ftw/hometerview/di/usecase/SearchUseCaseModule.kt @@ -0,0 +1,20 @@ +package com.ftw.hometerview.di.usecase + +import com.ftw.domain.repository.search.SearchRepository +import com.ftw.domain.usecase.search.GetSearchedBuildingAddressesUseCase +import com.ftw.domain.usecase.search.GetSearchedBuildingAddressesUseCaseImpl +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +class SearchUseCaseModule { + @Provides + fun provideSearchBuildingAddressesUseCaseImpl( + repository: SearchRepository + ): GetSearchedBuildingAddressesUseCase { + return GetSearchedBuildingAddressesUseCaseImpl(repository) + } +} diff --git a/app/src/main/java/com/ftw/hometerview/ui/main/home/HomeFragment.kt b/app/src/main/java/com/ftw/hometerview/ui/main/home/HomeFragment.kt index 5e83f66..35a4410 100644 --- a/app/src/main/java/com/ftw/hometerview/ui/main/home/HomeFragment.kt +++ b/app/src/main/java/com/ftw/hometerview/ui/main/home/HomeFragment.kt @@ -177,12 +177,14 @@ class HomeFragment : Fragment() { ).apply { addUpdateListener { valueAnimator -> val value = valueAnimator.animatedValue as? Int ?: 0 + if (_binding == null) return@addUpdateListener binding.inducementEmptyLayout.updateLayoutParams { height = value } } doOnEnd { + if (_binding == null) return@doOnEnd binding.inducementLayout.isVisible = true binding.inducementLayout.startAnimation( AlphaAnimation(0f, 1f).apply { diff --git a/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewActivity.kt b/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewActivity.kt index efcf843..e47ca09 100644 --- a/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewActivity.kt +++ b/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewActivity.kt @@ -6,6 +6,7 @@ import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil +import com.ftw.domain.entity.Address import com.ftw.domain.entity.Review import com.ftw.hometerview.R import com.ftw.hometerview.databinding.ActivityCreateReviewBinding @@ -51,11 +52,11 @@ class CreateReviewActivity : ) } - override fun onClickAddressFromFirstStepAddress(address: String) { - viewModel.setAddress(buildingId = "test") + override fun onClickAddressFromFirstStepAddress(address: Address) { + viewModel.setBuildingId(address.id) addFragment( R.id.fragment_container_view, - CreateReviewFirstStepSelectFloorFragment.newInstance(address), + CreateReviewFirstStepSelectFloorFragment.newInstance(address.name), true ) } diff --git a/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewViewModel.kt b/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewViewModel.kt index 072a372..7df2523 100644 --- a/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewViewModel.kt +++ b/app/src/main/java/com/ftw/hometerview/ui/review/CreateReviewViewModel.kt @@ -19,7 +19,7 @@ class CreateReviewViewModel( private var disadvantage: String? = null private var floor: String? = null - fun setAddress(buildingId: String) { + fun setBuildingId(buildingId: String) { this.buildingId = buildingId } diff --git a/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressFragment.kt b/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressFragment.kt index 78c5b69..cfcf227 100644 --- a/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressFragment.kt +++ b/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressFragment.kt @@ -4,11 +4,13 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.databinding.DataBindingUtil import androidx.fragment.app.Fragment import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle +import com.ftw.domain.entity.Address import com.ftw.hometerview.R import com.ftw.hometerview.adapter.DataBindingRecyclerAdapter import com.ftw.hometerview.adapter.DividerItemDecoration @@ -26,7 +28,7 @@ class CreateReviewFirstStepInputAddressFragment : Fragment() { } interface Listener { - fun onClickAddressFromFirstStepAddress(address: String) + fun onClickAddressFromFirstStepAddress(address: Address) } private var _binding: FragmentCreateReviewFirstStepInputAddressBinding? = null @@ -48,7 +50,8 @@ class CreateReviewFirstStepInputAddressFragment : Fragment() { container, false ).apply { - this.viewModel = this@CreateReviewFirstStepInputAddressFragment.viewModel + lifecycleOwner = viewLifecycleOwner + viewModel = this@CreateReviewFirstStepInputAddressFragment.viewModel } return binding.root } @@ -86,6 +89,9 @@ class CreateReviewFirstStepInputAddressFragment : Fragment() { hideKeyboard() (activity as? Listener)?.onClickAddressFromFirstStepAddress(event.address) } + is CreateReviewFirstStepInputAddressViewModel.Event.Error -> { + Toast.makeText(requireContext(), event.throwable.message, Toast.LENGTH_SHORT) + } else -> { // Do Nothing } diff --git a/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressViewModel.kt b/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressViewModel.kt index 55897a2..98bbd79 100644 --- a/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressViewModel.kt +++ b/app/src/main/java/com/ftw/hometerview/ui/review/first/CreateReviewFirstStepInputAddressViewModel.kt @@ -1,6 +1,7 @@ package com.ftw.hometerview.ui.review.first -import com.ftw.domain.usecase.address.GetAddressUseCase +import com.ftw.domain.entity.Address +import com.ftw.domain.usecase.search.GetSearchedBuildingAddressesUseCase import com.ftw.hometerview.BR import com.ftw.hometerview.R import com.ftw.hometerview.adapter.RecyclerItem @@ -10,24 +11,31 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.onCompletion +import kotlinx.coroutines.flow.onStart import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.transformLatest class CreateReviewFirstStepInputAddressViewModel( dispatcher: Dispatcher, - private val getAddressUseCase: GetAddressUseCase + private val getSearchedBuildingAddressesUseCase: GetSearchedBuildingAddressesUseCase ) { sealed class Event { object Nothing : Event() - data class OnClickAddress(val address: String) : Event() + data class Error(val throwable: Throwable) : Event() + data class OnClickAddress(val address: Address) : Event() } private val _event: MutableStateFlow = MutableStateFlow(Event.Nothing) val event: StateFlow = _event.asStateFlow() + private val _isLoading: MutableStateFlow = MutableStateFlow(false) + val isLoading: StateFlow = _isLoading + val address: MutableStateFlow = MutableStateFlow("") val addressItems: StateFlow> = @@ -35,13 +43,16 @@ class CreateReviewFirstStepInputAddressViewModel( .debounce(500) .transformLatest { address -> flow { - if (address.isNotBlank()) emit(getAddressUseCase(address)) - else emit(Result.success(emptyList())) - }.collect { result -> - if (result.isSuccess && result.getOrNull() != null) { - emit( - result.getOrDefault(emptyList()) - .map { searchedAddress -> + if (address.isNotBlank()) emit(getSearchedBuildingAddressesUseCase(address)) + else emit(emptyList()) + } + .onStart { _isLoading.value = true } + .onCompletion { _isLoading.value = false } + .catch { _event.value = Event.Error(it) } + .collect { addresses -> + if (addresses.isNotEmpty()) { + emit( + addresses.map { searchedAddress -> RecyclerItem( data = CreateReviewAddressItem( address = searchedAddress, @@ -51,17 +62,17 @@ class CreateReviewFirstStepInputAddressViewModel( variableId = BR.item ) } - ) - } else { - emit(emptyList()) + ) + } else { + emit(emptyList()) + } } - } }.stateIn(CoroutineScope(dispatcher.ui()), SharingStarted.Eagerly, emptyList()) } data class CreateReviewAddressItem( - val address: String, - val onClick: (String) -> Unit + val address: Address, + val onClick: (Address) -> Unit ) { fun onClick() { this.onClick(address) diff --git a/app/src/main/res/layout/fragment_create_review_first_step_input_address.xml b/app/src/main/res/layout/fragment_create_review_first_step_input_address.xml index 94121ca..f05ea0e 100644 --- a/app/src/main/res/layout/fragment_create_review_first_step_input_address.xml +++ b/app/src/main/res/layout/fragment_create_review_first_step_input_address.xml @@ -280,5 +280,15 @@ tools:itemCount="10" /> + + diff --git a/app/src/main/res/layout/fragment_create_review_first_step_select_floor.xml b/app/src/main/res/layout/fragment_create_review_first_step_select_floor.xml index cc08958..40c2abd 100644 --- a/app/src/main/res/layout/fragment_create_review_first_step_select_floor.xml +++ b/app/src/main/res/layout/fragment_create_review_first_step_select_floor.xml @@ -46,6 +46,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_size_14" + android:onClick="@{() -> viewModel.onClickBack()}" app:srcCompat="@drawable/icon_back" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/list_item_create_review_search_address.xml b/app/src/main/res/layout/list_item_create_review_search_address.xml index ee31f45..1a96d16 100644 --- a/app/src/main/res/layout/list_item_create_review_search_address.xml +++ b/app/src/main/res/layout/list_item_create_review_search_address.xml @@ -13,7 +13,7 @@ android:padding="@dimen/dp_size_16" android:background="@color/white" android:onClick="@{() -> item.onClick()}" - android:text="@{item.address}" + android:text="@{item.address.name}" android:fontFamily="@font/pretendard_regular" android:textSize="@dimen/sp_size_14" android:textColor="@color/gray_900" diff --git a/data/src/main/java/com/ftw/data/datasource/search/SearchDataSource.kt b/data/src/main/java/com/ftw/data/datasource/search/SearchDataSource.kt new file mode 100644 index 0000000..daa368c --- /dev/null +++ b/data/src/main/java/com/ftw/data/datasource/search/SearchDataSource.kt @@ -0,0 +1,7 @@ +package com.ftw.data.datasource.search + +import com.ftw.domain.entity.Address + +interface SearchDataSource { + suspend fun buildings(keyword: String): List
+} diff --git a/data/src/main/java/com/ftw/data/remote/api/SearchAPI.kt b/data/src/main/java/com/ftw/data/remote/api/SearchAPI.kt new file mode 100644 index 0000000..f9b5c68 --- /dev/null +++ b/data/src/main/java/com/ftw/data/remote/api/SearchAPI.kt @@ -0,0 +1,14 @@ +package com.ftw.data.remote.api + +import com.ftw.data.remote.response.RemoteResponse +import com.ftw.data.remote.response.address.AddressResponse +import retrofit2.Response +import retrofit2.http.GET +import retrofit2.http.Query + +interface SearchAPI { + @GET("/api/v1/place") + suspend fun buildings( + @Query("keyword") keyword: String + ): Response>> +} diff --git a/data/src/main/java/com/ftw/data/remote/datasource/search/SearchRemoteDataSource.kt b/data/src/main/java/com/ftw/data/remote/datasource/search/SearchRemoteDataSource.kt new file mode 100644 index 0000000..edd2207 --- /dev/null +++ b/data/src/main/java/com/ftw/data/remote/datasource/search/SearchRemoteDataSource.kt @@ -0,0 +1,22 @@ +package com.ftw.data.remote.datasource.search + +import com.ftw.data.datasource.search.SearchDataSource +import com.ftw.data.remote.api.SearchAPI +import com.ftw.data.remote.exception.ResponseException +import com.ftw.data.remote.response.address.toEntity +import com.ftw.domain.entity.Address + +class SearchRemoteDataSource(private val api: SearchAPI) : SearchDataSource { + override suspend fun buildings(keyword: String): List
{ + return try { + val response = api.buildings(keyword) + if (response.isSuccessful) { + response.body()?.data?.map { it.toEntity() } ?: emptyList() + } else { + throw ResponseException("Network Exception") + } + } catch (e: Exception) { + throw e + } + } +} diff --git a/data/src/main/java/com/ftw/data/remote/response/address/AddressResponse.kt b/data/src/main/java/com/ftw/data/remote/response/address/AddressResponse.kt new file mode 100644 index 0000000..409ea11 --- /dev/null +++ b/data/src/main/java/com/ftw/data/remote/response/address/AddressResponse.kt @@ -0,0 +1,13 @@ +package com.ftw.data.remote.response.address + +import com.ftw.domain.entity.Address +import com.google.gson.annotations.SerializedName + +data class AddressResponse( + @SerializedName("id") val id: String, + @SerializedName("name") val name: String +) + +fun AddressResponse.toEntity(): Address { + return Address(id, name) +} diff --git a/data/src/main/java/com/ftw/data/repository/search/SearchRepositoryImpl.kt b/data/src/main/java/com/ftw/data/repository/search/SearchRepositoryImpl.kt new file mode 100644 index 0000000..905f60a --- /dev/null +++ b/data/src/main/java/com/ftw/data/repository/search/SearchRepositoryImpl.kt @@ -0,0 +1,11 @@ +package com.ftw.data.repository.search + +import com.ftw.data.datasource.search.SearchDataSource +import com.ftw.domain.entity.Address +import com.ftw.domain.repository.search.SearchRepository + +class SearchRepositoryImpl(private val dataSource: SearchDataSource) : SearchRepository { + override suspend fun buildings(keyword: String): List
{ + return dataSource.buildings(keyword) + } +} diff --git a/domain/src/main/java/com/ftw/domain/entity/Address.kt b/domain/src/main/java/com/ftw/domain/entity/Address.kt new file mode 100644 index 0000000..8785c85 --- /dev/null +++ b/domain/src/main/java/com/ftw/domain/entity/Address.kt @@ -0,0 +1,6 @@ +package com.ftw.domain.entity + +data class Address( + val id: String, + val name: String +) diff --git a/domain/src/main/java/com/ftw/domain/repository/search/SearchRepository.kt b/domain/src/main/java/com/ftw/domain/repository/search/SearchRepository.kt new file mode 100644 index 0000000..125dcb5 --- /dev/null +++ b/domain/src/main/java/com/ftw/domain/repository/search/SearchRepository.kt @@ -0,0 +1,7 @@ +package com.ftw.domain.repository.search + +import com.ftw.domain.entity.Address + +interface SearchRepository { + suspend fun buildings(keyword: String): List
+} diff --git a/domain/src/main/java/com/ftw/domain/usecase/address/GetAddressUseCase.kt b/domain/src/main/java/com/ftw/domain/usecase/address/GetAddressUseCase.kt deleted file mode 100644 index 6d871f0..0000000 --- a/domain/src/main/java/com/ftw/domain/usecase/address/GetAddressUseCase.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.ftw.domain.usecase.address - -interface GetAddressUseCase { - suspend operator fun invoke(query: String): Result> -} diff --git a/domain/src/main/java/com/ftw/domain/usecase/address/GetAddressUseCaseImpl.kt b/domain/src/main/java/com/ftw/domain/usecase/address/GetAddressUseCaseImpl.kt deleted file mode 100644 index 7f18b84..0000000 --- a/domain/src/main/java/com/ftw/domain/usecase/address/GetAddressUseCaseImpl.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.ftw.domain.usecase.address - -class GetAddressUseCaseImpl : GetAddressUseCase { - override suspend operator fun invoke(query: String): Result> { - return Result.success( - listOf( - "서울 마포구 월드컵북로", - "서울 마포구 월드컵북로 1길 35", - "서울 마포구 월드컵북로 2길 3", - "서울 마포구 월드컵북로 4길 6", - "서울 마포구 월드컵북로 5가길 12", - "서울 마포구 월드컵북로 5나길 2", - "서울 마포구 월드컵북로 52길 9" - ) - ) - } -} diff --git a/domain/src/main/java/com/ftw/domain/usecase/search/GetSearchedBuildingAddressesUseCase.kt b/domain/src/main/java/com/ftw/domain/usecase/search/GetSearchedBuildingAddressesUseCase.kt new file mode 100644 index 0000000..fb0f50b --- /dev/null +++ b/domain/src/main/java/com/ftw/domain/usecase/search/GetSearchedBuildingAddressesUseCase.kt @@ -0,0 +1,7 @@ +package com.ftw.domain.usecase.search + +import com.ftw.domain.entity.Address + +interface GetSearchedBuildingAddressesUseCase { + suspend operator fun invoke(keyword: String): List
+} diff --git a/domain/src/main/java/com/ftw/domain/usecase/search/GetSearchedBuildingAddressesUseCaseImpl.kt b/domain/src/main/java/com/ftw/domain/usecase/search/GetSearchedBuildingAddressesUseCaseImpl.kt new file mode 100644 index 0000000..df25399 --- /dev/null +++ b/domain/src/main/java/com/ftw/domain/usecase/search/GetSearchedBuildingAddressesUseCaseImpl.kt @@ -0,0 +1,21 @@ +package com.ftw.domain.usecase.search + +import com.ftw.domain.entity.Address +import com.ftw.domain.repository.search.SearchRepository + +class GetSearchedBuildingAddressesUseCaseImpl( + private val repository: SearchRepository +) : GetSearchedBuildingAddressesUseCase { + override suspend fun invoke(keyword: String): List
{ +// return repository.buildings(key®word) + return listOf( + Address("0", "서울 마포구 월드컵북로"), + Address("1", "서울 마포구 월드컵북로 1길 35"), + Address("2", "서울 마포구 월드컵북로 2길 3"), + Address("3", "서울 마포구 월드컵북로 4길 6"), + Address("4", "서울 마포구 월드컵북로 5가길 12"), + Address("5", "서울 마포구 월드컵북로 5나길 2"), + Address("6", "서울 마포구 월드컵북로 52길 9") + ) + } +}