mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 15:27:01 +00:00
Merge pull request #144 from OpenBankProject/issue143
closes issue #143 - Refactoring TransactionRequests
This commit is contained in:
commit
2e108872f8
@ -103,7 +103,7 @@ payments_enabled=true
|
||||
#transaction requests are replacing simple payments starting from 1.4.0
|
||||
transactionRequests_enabled=true
|
||||
transactionRequests_connector=mapped
|
||||
transactionRequests_supported_types=SANDBOX_TAN,INTRABANK
|
||||
transactionRequests_supported_types=SANDBOX_TAN,INTRABANK,SEPA,FREE_FORM
|
||||
|
||||
|
||||
# For video conference meetings (createMeeting)
|
||||
|
||||
@ -231,11 +231,17 @@ trait APIMethods210 {
|
||||
} ?~ {
|
||||
ErrorMessages.InvalidJsonFormat
|
||||
}
|
||||
case "FREE_FORM" => tryo {
|
||||
json.extract[TransactionRequestDetailsFreeFormJSON]
|
||||
} ?~ {
|
||||
ErrorMessages.InvalidJsonFormat
|
||||
}
|
||||
}
|
||||
|
||||
transDetails <- transactionRequestType.value match {
|
||||
case "SANDBOX_TAN" => tryo{getTransactionRequestDetailsSandBoxTanFromJson(transDetailsJson.asInstanceOf[TransactionRequestDetailsSandBoxTanJSON])}
|
||||
case "SEPA" => tryo{getTransactionRequestDetailsSEPAFromJson(transDetailsJson.asInstanceOf[TransactionRequestDetailsSEPAJSON])}
|
||||
case "FREE_FORM" => tryo{getTransactionRequestDetailsFreeFormFromJson(transDetailsJson.asInstanceOf[TransactionRequestDetailsFreeFormJSON])}
|
||||
}
|
||||
|
||||
fromBank <- Bank(bankId) ?~! {ErrorMessages.BankNotFound}
|
||||
@ -245,9 +251,15 @@ trait APIMethods210 {
|
||||
// Prevent default value for transaction request type (at least).
|
||||
transferCurrencyEqual <- tryo(assert(transDetailsJson.value.currency == fromAccount.currency)) ?~! {"Transfer body currency and holder account currency must be the same."}
|
||||
|
||||
transDetailsSerialized <- tryo{
|
||||
implicit val formats = Serialization.formats(NoTypeHints)
|
||||
write(transDetailsJson)
|
||||
transDetailsSerialized<- transactionRequestType.value match {
|
||||
case "FREE_FORM" => tryo{
|
||||
implicit val formats = Serialization.formats(NoTypeHints)
|
||||
write(json)
|
||||
}
|
||||
case _ => tryo{
|
||||
implicit val formats = Serialization.formats(NoTypeHints)
|
||||
write(transDetailsJson)
|
||||
}
|
||||
}
|
||||
|
||||
createdTransactionRequest <- transactionRequestType.value match {
|
||||
@ -256,11 +268,17 @@ trait APIMethods210 {
|
||||
toBankId <- Full(BankId(transDetailsJson.asInstanceOf[TransactionRequestDetailsSandBoxTanJSON].to.bank_id))
|
||||
toAccountId <- Full(AccountId(transDetailsJson.asInstanceOf[TransactionRequestDetailsSandBoxTanJSON].to.account_id))
|
||||
toAccount <- BankAccount(toBankId, toAccountId) ?~! {ErrorMessages.CounterpartyNotFound}
|
||||
|
||||
createdTransactionRequest <- Connector.connector.vend.createTransactionRequestv210(u, fromAccount, Full(toAccount), transactionRequestType, transDetails, transDetailsSerialized)
|
||||
} yield createdTransactionRequest
|
||||
|
||||
}
|
||||
case "SEPA" => Connector.connector.vend.createTransactionRequestv210(u, fromAccount, Empty, transactionRequestType, transDetails, transDetailsSerialized)
|
||||
case "SEPA" => {
|
||||
Connector.connector.vend.createTransactionRequestv210(u, fromAccount, Empty, transactionRequestType, transDetails, transDetailsSerialized)
|
||||
}
|
||||
case "FREE_FORM" => {
|
||||
Connector.connector.vend.createTransactionRequestv210(u, fromAccount, Empty, transactionRequestType, transDetails, transDetailsSerialized)
|
||||
}
|
||||
}
|
||||
} yield {
|
||||
// Explicitly format as v2.0.0 json
|
||||
|
||||
@ -54,9 +54,14 @@ case class TransactionRequestDetailsSandBoxTanJSON(
|
||||
|
||||
case class TransactionRequestDetailsSEPAJSON(
|
||||
value : AmountOfMoneyJSON,
|
||||
IBAN: String,
|
||||
description : String
|
||||
) extends TransactionRequestDetailsJSON
|
||||
|
||||
case class TransactionRequestDetailsFreeFormJSON(
|
||||
value : AmountOfMoneyJSON
|
||||
) extends TransactionRequestDetailsJSON
|
||||
|
||||
case class TransactionRequestWithChargeJSON210(
|
||||
id: String,
|
||||
`type`: String,
|
||||
@ -115,6 +120,17 @@ object JSONFactory210{
|
||||
)
|
||||
}
|
||||
|
||||
def getTransactionRequestDetailsFreeFormFromJson(details: TransactionRequestDetailsFreeFormJSON) : TransactionRequestDetailsFreeForm = {
|
||||
val amount = AmountOfMoney (
|
||||
currency = details.value.currency,
|
||||
amount = details.value.amount
|
||||
)
|
||||
|
||||
TransactionRequestDetailsFreeForm (
|
||||
value = amount
|
||||
)
|
||||
}
|
||||
|
||||
/** Creates v2.1.0 representation of a TransactionType
|
||||
*
|
||||
* @param tr An internal TransactionRequest instance
|
||||
|
||||
@ -69,7 +69,7 @@ object TransactionRequests extends SimpleInjector {
|
||||
)
|
||||
|
||||
trait TransactionRequestDetails {
|
||||
val value: AmountOfMoney
|
||||
val value : AmountOfMoney
|
||||
}
|
||||
|
||||
case class TransactionRequestDetailsSandBoxTan (
|
||||
@ -83,6 +83,10 @@ object TransactionRequests extends SimpleInjector {
|
||||
val description : String
|
||||
) extends TransactionRequestDetails
|
||||
|
||||
case class TransactionRequestDetailsFreeForm (
|
||||
val value : AmountOfMoney
|
||||
) extends TransactionRequestDetails
|
||||
|
||||
val transactionRequestProvider = new Inject(buildOne _) {}
|
||||
|
||||
def buildOne: TransactionRequestProvider =
|
||||
|
||||
Loading…
Reference in New Issue
Block a user