refactor/changed the AGENT_CASH_WITHDRAWAL request json

This commit is contained in:
hongwei 2024-11-22 17:08:26 +01:00
parent 82e5ea6a84
commit f8aff92622
12 changed files with 69 additions and 33 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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