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