From ecb7d89d93a65cc49ef6af06bef598644d667fb1 Mon Sep 17 00:00:00 2001 From: constantine2nd Date: Thu, 8 Feb 2018 17:10:34 +0100 Subject: [PATCH] Endpoint createFx implemented in mapper mode --- src/main/scala/code/api/util/APIUtil.scala | 4 ++ .../scala/code/api/v2_2_0/APIMethods220.scala | 2 +- .../scala/code/api/v3_0_0/OBPAPI3_0_0.scala | 1 + .../scala/code/bankconnectors/Connector.scala | 13 +++--- .../bankconnectors/LocalMappedConnector.scala | 41 +++++++++++++++++++ 5 files changed, 54 insertions(+), 7 deletions(-) diff --git a/src/main/scala/code/api/util/APIUtil.scala b/src/main/scala/code/api/util/APIUtil.scala index 75f0b323b..40cc4d598 100644 --- a/src/main/scala/code/api/util/APIUtil.scala +++ b/src/main/scala/code/api/util/APIUtil.scala @@ -233,6 +233,10 @@ val dateformat = new java.text.SimpleDateFormat("yyyy-MM-dd") val CreateOrUpdateCounterpartyMetadataError = "OBP-30036: Could not create or update CounterpartyMetadata" val CounterpartyMetadataNotFound = "OBP-30037: CounterpartyMetadata not found. Please specify valid values for BANK_ID, ACCOUNT_ID and COUNTERPARTY_ID. " + val CreateFxRateError = "OBP-30032: Could not insert the Fx Rate" + val UpdateFxRateError = "OBP-30033: Could not update the Fx Rate" + val UnknownFxRateError = "OBP-30033: Unknown Fx Rate error" + // Meetings val MeetingsNotSupported = "OBP-30101: Meetings are not supported on this server." diff --git a/src/main/scala/code/api/v2_2_0/APIMethods220.scala b/src/main/scala/code/api/v2_2_0/APIMethods220.scala index fe79a226c..02b829b8f 100644 --- a/src/main/scala/code/api/v2_2_0/APIMethods220.scala +++ b/src/main/scala/code/api/v2_2_0/APIMethods220.scala @@ -643,7 +643,7 @@ trait APIMethods220 { UnknownError ), Catalogs(notCore, notPSD2, OBWG), - Nil, + List(apiTagFx), Some(List(canCreateFxRate, canCreateFxRateAtAnyBank)) ) diff --git a/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala b/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala index 2bab8a75a..d68e1ab6d 100644 --- a/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala +++ b/src/main/scala/code/api/v3_0_0/OBPAPI3_0_0.scala @@ -214,6 +214,7 @@ object OBPAPI3_0_0 extends OBPRestHelper with APIMethods130 with APIMethods140 w // Possible Endpoints from 2.1.0 val endpointsOf2_2_0 = Implementations2_2_0.getCurrentFxRate :: + Implementations2_2_0.createFx :: Implementations2_2_0.getCounterpartiesForAccount :: Implementations2_2_0.getCounterpartyById :: Implementations2_2_0.getMessageDocs :: diff --git a/src/main/scala/code/bankconnectors/Connector.scala b/src/main/scala/code/bankconnectors/Connector.scala index e92c2034d..d5ca1caac 100644 --- a/src/main/scala/code/bankconnectors/Connector.scala +++ b/src/main/scala/code/bankconnectors/Connector.scala @@ -1114,12 +1114,13 @@ trait Connector extends MdcLoggable{ def createOrUpdateFXRate( - bankId : String, - fromCurrencyCode: String, - toCurrencyCode: String, - conversionValue: Double, - inverseConversionValue: Double, - effectiveDate: Date): Box[FXRate] = Failure(NotImplemented + currentMethodName) + bankId: String, + fromCurrencyCode: String, + toCurrencyCode: String, + conversionValue: Double, + inverseConversionValue: Double, + effectiveDate: Date + ): Box[FXRate] = Failure(NotImplemented + currentMethodName) diff --git a/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/src/main/scala/code/bankconnectors/LocalMappedConnector.scala index b09cf2a74..1b117efaf 100644 --- a/src/main/scala/code/bankconnectors/LocalMappedConnector.scala +++ b/src/main/scala/code/bankconnectors/LocalMappedConnector.scala @@ -1470,6 +1470,47 @@ object LocalMappedConnector extends Connector with MdcLoggable { fxRateFromTo.orElse(fxRateToFrom) } + override def createOrUpdateFXRate( + bankId: String, + fromCurrencyCode: String, + toCurrencyCode: String, + conversionValue: Double, + inverseConversionValue: Double, + effectiveDate: Date + ): Box[FXRate] = { + val fxRateFromTo = MappedFXRate.find( + By(MappedFXRate.mBankId, bankId), + By(MappedFXRate.mFromCurrencyCode, fromCurrencyCode), + By(MappedFXRate.mToCurrencyCode, toCurrencyCode) + ) + fxRateFromTo match { + case Full(x) => + tryo { + x + .mBankId(bankId) + .mFromCurrencyCode(fromCurrencyCode) + .mToCurrencyCode(toCurrencyCode) + .mConversionValue(conversionValue) + .mInverseConversionValue(inverseConversionValue) + .mEffectiveDate(effectiveDate) + .saveMe() + } ?~! UpdateFxRateError + case Empty => + tryo { + MappedFXRate.create + .mBankId(bankId) + .mFromCurrencyCode(fromCurrencyCode) + .mToCurrencyCode(toCurrencyCode) + .mConversionValue(conversionValue) + .mInverseConversionValue(inverseConversionValue) + .mEffectiveDate(effectiveDate) + .saveMe() + } ?~! CreateFxRateError + case _ => + Failure("UnknownFxRateError") + } + } + /** * get the TransactionRequestTypeCharge from the TransactionRequestTypeCharge table * In Mapped, we will ignore accountId, viewId for now.