From f8aff9262261b609a228a7644606221f1c6939e7 Mon Sep 17 00:00:00 2001 From: hongwei Date: Fri, 22 Nov 2024 17:08:26 +0100 Subject: [PATCH] refactor/changed the AGENT_CASH_WITHDRAWAL request json --- .../SwaggerDefinitionsJSON.scala | 6 ++++- .../main/scala/code/api/util/NewStyle.scala | 6 +++++ .../scala/code/api/v4_0_0/APIMethods400.scala | 5 ++--- .../code/api/v4_0_0/JSONFactory4.0.0.scala | 7 +++--- .../code/api/v5_1_0/JSONFactory5.1.0.scala | 2 ++ .../scala/code/bankconnectors/Connector.scala | 7 ++++++ .../bankconnectors/LocalMappedConnector.scala | 22 +++++++++++++------ .../code/customer/agent/AgentProvider.scala | 4 ++-- .../customer/agent/MappedAgentProvider.scala | 16 +++++++------- .../MappedTransactionRequestProvider.scala | 19 +++++++++++----- .../api/v4_0_0/TransactionRequestsTest.scala | 2 +- .../commons/model/CommonModel.scala | 6 ++--- 12 files changed, 69 insertions(+), 33 deletions(-) diff --git a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala index af99ce073..4cdf441bd 100644 --- a/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala +++ b/obp-api/src/main/scala/code/api/ResourceDocs1_4_0/SwaggerDefinitionsJSON.scala @@ -5516,7 +5516,10 @@ object SwaggerDefinitionsJSON { List(consumerJsonV510) ) - val agentIdJson = AgentIdJson(agentIdExample.value) + val agentIdJson = AgentCashWithdrawalJson( + bankIdExample.value, + agentNumberExample.value + ) val transactionRequestBodyAgentJsonV400 = TransactionRequestBodyAgentJsonV400( to = agentIdJson, @@ -5540,6 +5543,7 @@ object SwaggerDefinitionsJSON { val agentJsonV510 = AgentJsonV510( agent_id = agentIdExample.value, + bank_id = bankIdExample.value, legal_name = legalNameExample.value, mobile_phone_number = mobilePhoneNumberExample.value, agent_number = agentNumberExample.value, diff --git a/obp-api/src/main/scala/code/api/util/NewStyle.scala b/obp-api/src/main/scala/code/api/util/NewStyle.scala index 3e727c382..1ef1fe12c 100644 --- a/obp-api/src/main/scala/code/api/util/NewStyle.scala +++ b/obp-api/src/main/scala/code/api/util/NewStyle.scala @@ -2868,6 +2868,12 @@ object NewStyle extends MdcLoggable{ i => (unboxFullOrFail(i._1, callContext, s"$AgentNotFound. Current AGENT_ID($agentId)"), i._2) } } + + def getAgentByAgentNumber(bankId: BankId, agentNumber : String, callContext: Option[CallContext]): OBPReturnType[Agent] = { + Connector.connector.vend.getAgentByAgentNumber(bankId: BankId, agentNumber : String, callContext: Option[CallContext]) map { + i => (unboxFullOrFail(i._1, callContext, s"$AgentNotFound. Current BANK_ID(${bankId.value}) and AGENT_NUMBER($agentNumber)"), i._2) + } + } def updateAgentStatus( agentId: String, diff --git a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala index 5924f92bf..19ee121b2 100644 --- a/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala +++ b/obp-api/src/main/scala/code/api/v4_0_0/APIMethods400.scala @@ -12631,9 +12631,8 @@ object APIMethods400 extends RestHelper with APIMethods400 { transactionRequestBodyAgent <- NewStyle.function.tryons(s"${InvalidJsonFormat}, it should be $AGENT_CASH_WITHDRAWAL json format", 400, callContext) { json.extract[TransactionRequestBodyAgentJsonV400] } - toAgentId = transactionRequestBodyAgent.to.agent_id - (agent, callContext) <- NewStyle.function.getAgentByAgentId(toAgentId, callContext) - (customerAccountLinks, callContext) <- NewStyle.function.getCustomerAccountLinksByCustomerId(toAgentId, callContext) + (agent, callContext) <- NewStyle.function.getAgentByAgentNumber(BankId(transactionRequestBodyAgent.to.bank_id),transactionRequestBodyAgent.to.agent_number, callContext) + (customerAccountLinks, callContext) <- NewStyle.function.getCustomerAccountLinksByCustomerId(agent.agentId, callContext) customerAccountLink <- NewStyle.function.tryons(AgentAccountLinkNotFound, 400, callContext) { customerAccountLinks.head } diff --git a/obp-api/src/main/scala/code/api/v4_0_0/JSONFactory4.0.0.scala b/obp-api/src/main/scala/code/api/v4_0_0/JSONFactory4.0.0.scala index fec521ac8..00bf4c370 100644 --- a/obp-api/src/main/scala/code/api/v4_0_0/JSONFactory4.0.0.scala +++ b/obp-api/src/main/scala/code/api/v4_0_0/JSONFactory4.0.0.scala @@ -391,12 +391,13 @@ case class ConsentInfoJsonV400(consent_id: String, api_version: String) case class ConsentInfosJsonV400(consents: List[ConsentInfoJsonV400]) -case class AgentIdJson( - agent_id: String +case class AgentCashWithdrawalJson( + bank_id: String, + agent_number: String ) case class TransactionRequestBodyAgentJsonV400( - to: AgentIdJson, + to: AgentCashWithdrawalJson, value: AmountOfMoneyJsonV121, description: String, charge_policy: String, diff --git a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala index 61104f986..4da50262a 100644 --- a/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala +++ b/obp-api/src/main/scala/code/api/v5_1_0/JSONFactory5.1.0.scala @@ -333,6 +333,7 @@ case class PutAgentJsonV510( case class AgentJsonV510( agent_id: String, + bank_id: String, legal_name: String, mobile_phone_number: String, agent_number: String, @@ -948,6 +949,7 @@ object JSONFactory510 extends CustomJsonFormats { def createAgentJson(agent: Agent, bankAccount: BankAccount): AgentJsonV510 = { AgentJsonV510( agent_id = agent.agentId, + bank_id = agent.bankId, legal_name = agent.legalName, mobile_phone_number = agent.mobileNumber, agent_number = agent.number, diff --git a/obp-api/src/main/scala/code/bankconnectors/Connector.scala b/obp-api/src/main/scala/code/bankconnectors/Connector.scala index a0614e1d7..ed98ede63 100644 --- a/obp-api/src/main/scala/code/bankconnectors/Connector.scala +++ b/obp-api/src/main/scala/code/bankconnectors/Connector.scala @@ -1124,6 +1124,13 @@ trait Connector extends MdcLoggable { callContext: Option[CallContext] ): OBPReturnType[Box[Agent]] = Future{(Failure(setUnimplementedError(nameOf(getAgentByAgentId _))), callContext)} + + def getAgentByAgentNumber( + bankId: BankId, + agentNumber: String, + callContext: Option[CallContext] + ): OBPReturnType[Box[Agent]] = Future{(Failure(setUnimplementedError(nameOf(getAgentByAgentNumber _))), callContext)} + def getAgents( bankId : String, diff --git a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala index 602086fef..56eb8ed43 100644 --- a/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala +++ b/obp-api/src/main/scala/code/bankconnectors/LocalMappedConnector.scala @@ -10,12 +10,12 @@ import code.api.Constant._ import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON import code.api.attributedefinition.{AttributeDefinition, AttributeDefinitionDI} import code.api.cache.Caching -import code.api.util.APIUtil.{OBPReturnType, _} +import code.api.util.APIUtil._ import code.api.util.ErrorMessages._ import code.api.util._ import code.api.v1_4_0.JSONFactory1_4_0.TransactionRequestAccountJsonV140 import code.api.v2_1_0._ -import code.api.v4_0_0.{AgentIdJson, PostSimpleCounterpartyJson400, TransactionRequestBodyAgentJsonV400, TransactionRequestBodySimpleJsonV400} +import code.api.v4_0_0.{AgentCashWithdrawalJson, PostSimpleCounterpartyJson400, TransactionRequestBodyAgentJsonV400, TransactionRequestBodySimpleJsonV400} import code.atmattribute.{AtmAttribute, AtmAttributeX} import code.atms.{Atms, MappedAtm} import code.bankattribute.{BankAttribute, BankAttributeX} @@ -1664,6 +1664,16 @@ object LocalMappedConnector extends Connector with MdcLoggable { ).map((_, callContext)) } + override def getAgentByAgentNumber( + bankId : BankId, + agentNumber : String, + callContext: Option[CallContext] + ): OBPReturnType[Box[Agent]] = { + AgentX.agentProvider.vend.getAgentByAgentNumberFuture( + bankId, agentNumber: String + ).map((_, callContext)) + } + override def getAgents( bankId : String, queryParams: List[OBPQueryParam], @@ -4746,17 +4756,15 @@ object LocalMappedConnector extends Connector with MdcLoggable { bodyToAgent <- NewStyle.function.tryons(s"$TransactionRequestDetailsExtractException It can not extract to $TransactionRequestBodyAgentJsonV400", 400, callContext) { body.to_agent.get } - - toAgentId = bodyToAgent.agent_id - (agent, callContext) <- NewStyle.function.getAgentByAgentId(toAgentId, callContext) - (customerAccountLinks, callContext) <- NewStyle.function.getCustomerAccountLinksByCustomerId(toAgentId, callContext) + (agent, callContext) <- NewStyle.function.getAgentByAgentNumber(BankId(bodyToAgent.bank_id), bodyToAgent.agent_number, callContext) + (customerAccountLinks, callContext) <- NewStyle.function.getCustomerAccountLinksByCustomerId(agent.agentId, callContext) customerAccountLink <- NewStyle.function.tryons(AgentAccountLinkNotFound, 400, callContext) { customerAccountLinks.head } (toAccount, callContext) <- NewStyle.function.getBankAccount(BankId(customerAccountLink.bankId), AccountId(customerAccountLink.accountId), callContext) agentRequestJsonBody = TransactionRequestBodyAgentJsonV400( - to = AgentIdJson(toAgentId), + to = AgentCashWithdrawalJson(bodyToAgent.bank_id, bodyToAgent.agent_number), value = AmountOfMoneyJsonV121(body.value.currency, body.value.amount), description = body.description, charge_policy = transactionRequest.charge_policy, diff --git a/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala b/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala index 8bfb02ae8..b4737d51d 100644 --- a/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala +++ b/obp-api/src/main/scala/code/customer/agent/AgentProvider.scala @@ -31,9 +31,9 @@ trait AgentProvider { def getBankIdByAgentId(agentId: String): Box[String] - def getAgentByAgentNumber(agentNumber: String, bankId: BankId): Box[Agent] + def getAgentByAgentNumber(bankId: BankId, agentNumber: String): Box[Agent] - def getAgentByAgentNumberFuture(agentNumber: String, bankId: BankId): Future[Box[Agent]] + def getAgentByAgentNumberFuture(bankId: BankId, agentNumber: String): Future[Box[Agent]] def checkAgentNumberAvailable(bankId: BankId, agentNumber: String): Boolean diff --git a/obp-api/src/main/scala/code/customer/agent/MappedAgentProvider.scala b/obp-api/src/main/scala/code/customer/agent/MappedAgentProvider.scala index bded8cb9d..c69b8afae 100644 --- a/obp-api/src/main/scala/code/customer/agent/MappedAgentProvider.scala +++ b/obp-api/src/main/scala/code/customer/agent/MappedAgentProvider.scala @@ -56,30 +56,30 @@ object MappedAgentProvider extends AgentProvider with MdcLoggable { available } - override def getAgentByAgentId(customerId: String): Box[Agent] = { + override def getAgentByAgentId(agentId: String): Box[Agent] = { MappedCustomer.find( - By(MappedCustomer.mCustomerId, customerId) + By(MappedCustomer.mCustomerId, agentId) ) } - override def getBankIdByAgentId(customerId: String): Box[String] = { + override def getBankIdByAgentId(agentId: String): Box[String] = { val customer: Box[MappedCustomer] = MappedCustomer.find( - By(MappedCustomer.mCustomerId, customerId) + By(MappedCustomer.mCustomerId, agentId) ) for (c <- customer) yield { c.mBank.get } } - override def getAgentByAgentNumber(customerNumber: String, bankId: BankId): Box[Agent] = { + override def getAgentByAgentNumber(bankId: BankId, agentNumber: String): Box[Agent] = { MappedCustomer.find( - By(MappedCustomer.mNumber, customerNumber), + By(MappedCustomer.mNumber, agentNumber), By(MappedCustomer.mBank, bankId.value) ) } - override def getAgentByAgentNumberFuture(customerNumber: String, bankId: BankId): Future[Box[Agent]] = { - Future(getAgentByAgentNumber(customerNumber, bankId)) + override def getAgentByAgentNumberFuture(bankId: BankId, agentNumber: String): Future[Box[Agent]] = { + Future(getAgentByAgentNumber(bankId: BankId, agentNumber: String)) } diff --git a/obp-api/src/main/scala/code/transactionrequests/MappedTransactionRequestProvider.scala b/obp-api/src/main/scala/code/transactionrequests/MappedTransactionRequestProvider.scala index aaf9f0b50..9838c6903 100644 --- a/obp-api/src/main/scala/code/transactionrequests/MappedTransactionRequestProvider.scala +++ b/obp-api/src/main/scala/code/transactionrequests/MappedTransactionRequestProvider.scala @@ -368,13 +368,22 @@ class MappedTransactionRequest extends LongKeyedMapper[MappedTransactionRequest] None val t_to_agent = if (TransactionRequestTypes.withName(transactionType) == TransactionRequestTypes.AGENT_CASH_WITHDRAWAL && details.nonEmpty) { - val agentIdList: List[String] = for { + val agentNumberList: List[String] = for { JObject(child) <- parsedDetails - JField("agent_id", JString(agentId)) <- child + JField("agent_number", JString(agentNumber)) <- child } yield - agentId - val agentIdValue = if (agentIdList.isEmpty) "" else agentIdList.head - Some(TransactionRequestAgentId(agent_id = agentIdValue)) + agentNumber + val bankIdList: List[String] = for { + JObject(child) <- parsedDetails + JField("bank_id", JString(agentNumber)) <- child + } yield + agentNumber + val agentNumberValue = if (agentNumberList.isEmpty) "" else agentNumberList.head + val bankIdValue = if (bankIdList.isEmpty) "" else bankIdList.head + Some(transactionRequestAgentCashWithdrawal( + bank_id = bankIdValue, + agent_number = agentNumberValue + )) } else None diff --git a/obp-api/src/test/scala/code/api/v4_0_0/TransactionRequestsTest.scala b/obp-api/src/test/scala/code/api/v4_0_0/TransactionRequestsTest.scala index 3b365b514..77f8890c5 100644 --- a/obp-api/src/test/scala/code/api/v4_0_0/TransactionRequestsTest.scala +++ b/obp-api/src/test/scala/code/api/v4_0_0/TransactionRequestsTest.scala @@ -137,7 +137,7 @@ class TransactionRequestsTest extends V400ServerSetup with DefaultUsers { var transactionRequestBodySEPA = TransactionRequestBodySEPAJSON(bodyValue, IbanJson(counterpartySEPA.otherAccountSecondaryRoutingAddress), description, sharedChargePolicy) - var transactionRequestBodyAgentCashWithdrawal = TransactionRequestBodyAgentJsonV400(AgentIdJson(agentCashWithdrawalAgent.agent_id), bodyValue, description, sharedChargePolicy) + var transactionRequestBodyAgentCashWithdrawal = TransactionRequestBodyAgentJsonV400(AgentCashWithdrawalJson(agentCashWithdrawalAgent.bank_id,agentCashWithdrawalAgent.agent_number), bodyValue, description, sharedChargePolicy) var transactionRequestBodyCounterparty = TransactionRequestBodyCounterpartyJSON(CounterpartyIdJson(counterpartyCounterparty.counterpartyId), bodyValue, description, sharedChargePolicy) var transactionRequestBodySimple = TransactionRequestBodySimpleJsonV400(SwaggerDefinitionsJSON.postSimpleCounterpartyJson400.copy( other_account_routing_address = counterpartyCounterparty.otherAccountRoutingAddress, diff --git a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala index 4da9c0c0b..23248529c 100644 --- a/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala +++ b/obp-commons/src/main/scala/com/openbankproject/commons/model/CommonModel.scala @@ -859,8 +859,8 @@ case class TransactionRequestTransferToAtm( //For COUNTERPARTY, it needs the counterparty_id to find the toCounterparty--> toBankAccount case class TransactionRequestCounterpartyId (counterparty_id : String) -//For AGENT_CASH_WITHDRAWAL, it needs the agent_id to find the toAgent--> toBankAccount -case class TransactionRequestAgentId (agent_id : String) +//For AGENT_CASH_WITHDRAWAL, it needs the agent_number to find the toAgent--> toBankAccount +case class transactionRequestAgentCashWithdrawal (bank_id: String , agent_number : String) case class TransactionRequestSimple ( otherBankRoutingScheme: String, @@ -974,7 +974,7 @@ case class TransactionRequestBodyAllTypes ( @optional to_sepa_credit_transfers: Option[SepaCreditTransfers]= None,//TODO not stable, from berlin Group @optional - to_agent: Option[TransactionRequestAgentId]= None, + to_agent: Option[transactionRequestAgentCashWithdrawal]= None, value: AmountOfMoney, description: String