Merge pull request #144 from OpenBankProject/issue143

closes issue #143 - Refactoring TransactionRequests
This commit is contained in:
Simon Redfern 2016-08-25 17:30:09 +02:00 committed by GitHub
commit 2e108872f8
4 changed files with 44 additions and 6 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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 =