Refactor: Create Transaction Request Use Case
diff --git a/androidApp/src/main/java/org/mifos/openbanking/transfer/TransferFragment.kt b/androidApp/src/main/java/org/mifos/openbanking/transfer/TransferFragment.kt
index 13a0bcb..9544c20 100644
--- a/androidApp/src/main/java/org/mifos/openbanking/transfer/TransferFragment.kt
+++ b/androidApp/src/main/java/org/mifos/openbanking/transfer/TransferFragment.kt
@@ -17,12 +17,12 @@
 import org.mifos.openbanking.R
 import org.mifos.openbanking.databinding.FragmentTransferBinding
 import org.mifos.openbanking.viewModel.model.AccountModel
-import org.mifos.openbanking.viewModel.transfer.*
+import org.mifos.openbanking.viewModel.transaction.*
 
 class TransferFragment : BottomSheetDialogFragment() {
 
     private lateinit var binding: FragmentTransferBinding
-    private lateinit var transferViewModel: TransferViewModel
+    private lateinit var createTransactionRequestViewModel: CreateTransactionRequestViewModel
     private lateinit var account: AccountModel
 
     companion object {
@@ -43,8 +43,8 @@
 
         initBinding()
 
-        transferViewModel = ViewModelProviders.of(this).get(TransferViewModel::class.java)
-        val supportedBanks = transferViewModel.getSupportedBanks()
+        createTransactionRequestViewModel = ViewModelProviders.of(this).get(CreateTransactionRequestViewModel::class.java)
+        val supportedBanks = createTransactionRequestViewModel.getSupportedBanks()
         val bankNames = supportedBanks.map { it.shortName }.toTypedArray()
         val adapter: ArrayAdapter<String?> = ArrayAdapter(
             requireContext(), android.R.layout.simple_dropdown_item_1line, bankNames
@@ -57,11 +57,11 @@
 
     fun onProceedClicked(view: View) {
         binding.shimmerProceed.showShimmer(true)
-        transferViewModel.transferStateLiveData.addObserver { observeTransferState(it) }
+        createTransactionRequestViewModel.createTransactionRequestStateLiveData.addObserver { observeTransferState(it) }
         val bankName = binding.etBank.text.toString()
-        val supportedBanks = transferViewModel.getSupportedBanks()
+        val supportedBanks = createTransactionRequestViewModel.getSupportedBanks()
         val destinationBankId = supportedBanks.find { it.shortName == bankName }!!.id
-        transferViewModel.transferMoney(
+        createTransactionRequestViewModel.createTransactionRequest(
             account.bankId,
             account.accountId,
             destinationBankId,
@@ -72,9 +72,9 @@
         )
     }
 
-    private fun observeTransferState(state: TransferState) {
+    private fun observeTransferState(state: CreateTransactionRequestState) {
         when (state) {
-            is SuccessTransferState -> {
+            is SuccessCreateTransactionRequestState -> {
                 binding.shimmerProceed.hideShimmer()
                 Toast.makeText(
                     requireContext(),
@@ -84,11 +84,11 @@
                 dismiss()
             }
 
-            is LoadingTransferState -> {
+            is LoadingCreateTransactionRequestState -> {
 
             }
 
-            is ErrorTransferState -> {
+            is ErrorCreateTransactionRequestState -> {
                 binding.shimmerProceed.hideShimmer()
                 Toast.makeText(
                     requireContext(),
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/Api.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/Api.kt
index 02fe2bb..0906aa4 100644
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/Api.kt
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/Api.kt
@@ -12,6 +12,6 @@
     return "obp/v4.0.0/banks/$bankId/balances"
 }
 
-fun moneyTransferPath(bankId: String, accountId: String): String {
+fun createTransactionRequestPath(bankId: String, accountId: String): String {
     return "obp/v4.0.0/banks/$bankId/accounts/$accountId/owner/transaction-request-types/SANDBOX_TAN/transaction-requests"
 }
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/ClientApi.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/ClientApi.kt
index ccf27df..6ca628d 100644
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/ClientApi.kt
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/data/datasources/network/ClientApi.kt
@@ -22,8 +22,8 @@
 import org.mifos.openbanking.domain.usecase.fetchBalances.FetchBalancesResponse
 import org.mifos.openbanking.domain.usecase.loginClient.LoginClientRequest
 import org.mifos.openbanking.domain.usecase.loginClient.LoginClientResponse
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyRequest
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyResponse
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestRequest
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestResponse
 
 class ClientApi {
 
@@ -127,7 +127,7 @@
         }
     }
 
-    suspend fun transferMoney(request: TransferMoneyRequest): Response<TransferMoneyResponse> {
+    suspend fun createTransactionRequest(request: CreateTransactionRequestRequest): Response<CreateTransactionRequestResponse> {
         try {
 
             val content = "{" +
@@ -143,7 +143,7 @@
                     "}"
 
             val response = client.post<String>(
-                urlString = API_HOST + moneyTransferPath(
+                urlString = API_HOST + createTransactionRequestPath(
                     request.sourceBankId,
                     request.sourceAccountId
                 )
@@ -154,7 +154,7 @@
                 body = TextContent(content, contentType = ContentType.Application.Json)
             }
 
-            return Response.Success(TransferMoneyResponse())
+            return Response.Success(CreateTransactionRequestResponse())
 
         } catch (exp: ClientRequestException) {
             return Response.Error(exp)
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/data/repository/OpenBankingRepository.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/data/repository/OpenBankingRepository.kt
index 9d7b442..c557ca9 100644
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/data/repository/OpenBankingRepository.kt
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/data/repository/OpenBankingRepository.kt
@@ -12,8 +12,8 @@
 import org.mifos.openbanking.domain.usecase.fetchBanks.FetchBanksResponse
 import org.mifos.openbanking.domain.usecase.loginClient.LoginClientRequest
 import org.mifos.openbanking.domain.usecase.loginClient.LoginClientResponse
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyRequest
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyResponse
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestRequest
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestResponse
 
 class OpenBankingRepository(
     private val networkDataSource: NetworkDataSource
@@ -40,8 +40,8 @@
         return networkDataSource.getBankApi().fetchBanks(request)
     }
 
-    suspend fun transferMoney(request: TransferMoneyRequest): Response<TransferMoneyResponse> {
-        return networkDataSource.getClientApi().transferMoney(request)
+    suspend fun createTransactionRequest(request: CreateTransactionRequestRequest): Response<CreateTransactionRequestResponse> {
+        return networkDataSource.getClientApi().createTransactionRequest(request)
     }
 
 
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/di/KodeinInjector.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/di/KodeinInjector.kt
index 5a89ce6..65313f7 100644
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/di/KodeinInjector.kt
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/di/KodeinInjector.kt
@@ -17,7 +17,7 @@
 import org.mifos.openbanking.domain.usecase.fetchBalances.FetchBalancesUseCase
 import org.mifos.openbanking.domain.usecase.fetchBanks.FetchBanksUseCase
 import org.mifos.openbanking.domain.usecase.loginClient.LoginClientUseCase
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyUseCase
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestUseCase
 import kotlin.coroutines.CoroutineContext
 import kotlin.native.concurrent.ThreadLocal
 
@@ -54,8 +54,8 @@
             instance()
         )
     }
-    bind<TransferMoneyUseCase>() with singleton {
-        TransferMoneyUseCase(
+    bind<CreateTransactionRequestUseCase>() with singleton {
+        CreateTransactionRequestUseCase(
             instance()
         )
     }
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyRequest.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestRequest.kt
similarity index 77%
rename from common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyRequest.kt
rename to common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestRequest.kt
index 4b37570..80992ff 100644
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyRequest.kt
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestRequest.kt
@@ -1,8 +1,8 @@
-package org.mifos.openbanking.domain.usecase.transferMoney
+package org.mifos.openbanking.domain.usecase.createTransactionRequest
 
 import org.mifos.openbanking.domain.usecase.base.BaseRequest
 
-class TransferMoneyRequest(
+class CreateTransactionRequestRequest(
     val token: String,
     val sourceBankId: String,
     val sourceAccountId: String,
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestResponse.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestResponse.kt
new file mode 100644
index 0000000..d77afa9
--- /dev/null
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestResponse.kt
@@ -0,0 +1,3 @@
+package org.mifos.openbanking.domain.usecase.createTransactionRequest
+
+class CreateTransactionRequestResponse
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestUseCase.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestUseCase.kt
new file mode 100644
index 0000000..e766ebc
--- /dev/null
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/createTransactionRequest/CreateTransactionRequestUseCase.kt
@@ -0,0 +1,13 @@
+package org.mifos.openbanking.domain.usecase.createTransactionRequest
+
+import org.mifos.openbanking.base.Response
+import org.mifos.openbanking.data.repository.OpenBankingRepository
+import org.mifos.openbanking.domain.usecase.base.BaseUseCase
+
+class CreateTransactionRequestUseCase(private val repository: OpenBankingRepository) :
+    BaseUseCase<CreateTransactionRequestRequest, CreateTransactionRequestResponse>() {
+
+    override suspend fun run(): Response<CreateTransactionRequestResponse> {
+        return repository.createTransactionRequest(request)
+    }
+}
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyResponse.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyResponse.kt
deleted file mode 100644
index 3471a0a..0000000
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyResponse.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package org.mifos.openbanking.domain.usecase.transferMoney
-
-class TransferMoneyResponse
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyUseCase.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyUseCase.kt
deleted file mode 100644
index 7e7da0d..0000000
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/domain/usecase/transferMoney/TransferMoneyUseCase.kt
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.mifos.openbanking.domain.usecase.transferMoney
-
-import org.mifos.openbanking.base.Response
-import org.mifos.openbanking.data.repository.OpenBankingRepository
-import org.mifos.openbanking.domain.usecase.base.BaseUseCase
-
-class TransferMoneyUseCase(private val repository: OpenBankingRepository) :
-    BaseUseCase<TransferMoneyRequest, TransferMoneyResponse>() {
-
-    override suspend fun run(): Response<TransferMoneyResponse> {
-        return repository.transferMoney(request)
-    }
-}
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transaction/CreateTransactionRequestState.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transaction/CreateTransactionRequestState.kt
new file mode 100644
index 0000000..eb3fc0a
--- /dev/null
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transaction/CreateTransactionRequestState.kt
@@ -0,0 +1,8 @@
+package org.mifos.openbanking.viewModel.transaction
+
+
+sealed class CreateTransactionRequestState
+
+object SuccessCreateTransactionRequestState : CreateTransactionRequestState()
+object LoadingCreateTransactionRequestState : CreateTransactionRequestState()
+class ErrorCreateTransactionRequestState(val message: String?) : CreateTransactionRequestState()
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transaction/CreateTransactionRequestViewModel.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transaction/CreateTransactionRequestViewModel.kt
new file mode 100644
index 0000000..e65829d
--- /dev/null
+++ b/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transaction/CreateTransactionRequestViewModel.kt
@@ -0,0 +1,62 @@
+package org.mifos.openbanking.viewModel.transaction
+
+import dev.icerock.moko.mvvm.livedata.MutableLiveData
+import org.kodein.di.erased.instance
+import org.mifos.openbanking.base.Response
+import org.mifos.openbanking.coroutines.launchSilent
+import org.mifos.openbanking.data.datasources.disk.DiskDataSource
+import org.mifos.openbanking.di.KodeinInjector
+import org.mifos.openbanking.domain.usecase.fetchBanks.Bank
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestRequest
+import org.mifos.openbanking.domain.usecase.createTransactionRequest.CreateTransactionRequestUseCase
+import org.mifos.openbanking.viewModel.base.BaseViewModel
+
+class CreateTransactionRequestViewModel : BaseViewModel() {
+
+    // LIVE DATA
+    val createTransactionRequestStateLiveData = MutableLiveData<CreateTransactionRequestState>(
+        LoadingCreateTransactionRequestState
+    )
+
+    // USE CASE
+    private val createTransactionRequestUseCase by KodeinInjector.instance<CreateTransactionRequestUseCase>()
+
+    private val diskDataSource by KodeinInjector.instance<DiskDataSource>()
+
+    fun createTransactionRequest(
+        sourceBankId: String,
+        sourceAccountId: String,
+        destinationBankId: String,
+        destinationAccountId: String,
+        currency: String,
+        amount: Double,
+        description: String
+    ) = launchSilent(
+        coroutineContext,
+        exceptionHandler,
+        job
+    ) {
+        val request =
+            CreateTransactionRequestRequest(
+                diskDataSource.getUserModel()!!.token!!,
+                sourceBankId,
+                sourceAccountId,
+                destinationBankId,
+                destinationAccountId,
+                currency,
+                amount,
+                description
+            )
+
+        val response = createTransactionRequestUseCase.execute(request)
+        if (response is Response.Success) {
+            createTransactionRequestStateLiveData.postValue(SuccessCreateTransactionRequestState)
+        } else if (response is Response.Error) {
+            createTransactionRequestStateLiveData.postValue(ErrorCreateTransactionRequestState(response.message))
+        }
+    }
+
+    fun getSupportedBanks(): List<Bank> {
+        return diskDataSource.getSupportedBanks()
+    }
+}
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transfer/TransferState.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transfer/TransferState.kt
deleted file mode 100644
index 7f80f9d..0000000
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transfer/TransferState.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.mifos.openbanking.viewModel.transfer
-
-
-sealed class TransferState
-
-object SuccessTransferState : TransferState()
-object LoadingTransferState : TransferState()
-class ErrorTransferState(val message: String?) : TransferState()
\ No newline at end of file
diff --git a/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transfer/TransferViewModel.kt b/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transfer/TransferViewModel.kt
deleted file mode 100644
index 24ad58f..0000000
--- a/common/src/commonMain/kotlin/org/mifos/openbanking/viewModel/transfer/TransferViewModel.kt
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.mifos.openbanking.viewModel.transfer
-
-import dev.icerock.moko.mvvm.livedata.MutableLiveData
-import org.kodein.di.erased.instance
-import org.mifos.openbanking.base.Response
-import org.mifos.openbanking.coroutines.launchSilent
-import org.mifos.openbanking.data.datasources.disk.DiskDataSource
-import org.mifos.openbanking.di.KodeinInjector
-import org.mifos.openbanking.domain.usecase.fetchBanks.Bank
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyRequest
-import org.mifos.openbanking.domain.usecase.transferMoney.TransferMoneyUseCase
-import org.mifos.openbanking.viewModel.base.BaseViewModel
-
-class TransferViewModel : BaseViewModel() {
-
-    // LIVE DATA
-    val transferStateLiveData = MutableLiveData<TransferState>(
-        LoadingTransferState
-    )
-
-    // USE CASE
-    private val transferMoneyUseCase by KodeinInjector.instance<TransferMoneyUseCase>()
-
-    private val diskDataSource by KodeinInjector.instance<DiskDataSource>()
-
-    fun transferMoney(
-        sourceBankId: String,
-        sourceAccountId: String,
-        destinationBankId: String,
-        destinationAccountId: String,
-        currency: String,
-        amount: Double,
-        description: String
-    ) = launchSilent(
-        coroutineContext,
-        exceptionHandler,
-        job
-    ) {
-        val request =
-            TransferMoneyRequest(
-                diskDataSource.getUserModel()!!.token!!,
-                sourceBankId,
-                sourceAccountId,
-                destinationBankId,
-                destinationAccountId,
-                currency,
-                amount,
-                description
-            )
-
-        val response = transferMoneyUseCase.execute(request)
-        if (response is Response.Success) {
-            transferStateLiveData.postValue(SuccessTransferState)
-        } else if (response is Response.Error) {
-            transferStateLiveData.postValue(ErrorTransferState(response.message))
-        }
-    }
-
-    fun getSupportedBanks(): List<Bank> {
-        return diskDataSource.getSupportedBanks()
-    }
-}
\ No newline at end of file