refactor/added the productInstanceCode to accountAttribute

This commit is contained in:
hongwei 2022-09-16 12:12:08 +02:00
parent a61d6c4c3c
commit 0b802cadf4
23 changed files with 89 additions and 35 deletions

View File

@ -55,12 +55,14 @@ trait AccountAttributeProvider {
accountAttributeId: Option[String],
name: String,
attributeType: AccountAttributeType.Value,
value: String): Future[Box[AccountAttribute]]
value: String,
productInstanceCode: Option[String]): Future[Box[AccountAttribute]]
def createAccountAttributes(bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute]): Future[Box[List[AccountAttribute]]]
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String]): Future[Box[List[AccountAttribute]]]
def deleteAccountAttribute(accountAttributeId: String): Future[Box[Boolean]]
@ -87,12 +89,14 @@ class RemotedataAccountAttributeCaseClasses {
accountAttributeId: Option[String],
name: String,
attributeType: AccountAttributeType.Value,
value: String)
value: String,
productInstanceCode: Option[String])
case class createAccountAttributes(bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute])
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String])
case class deleteAccountAttribute(accountAttributeId: String)

View File

@ -90,7 +90,8 @@ object MappedAccountAttributeProvider extends AccountAttributeProvider {
accountAttributeId: Option[String],
name: String,
attributeType: AccountAttributeType.Value,
value: String): Future[Box[AccountAttribute]] = {
value: String,
productInstanceCode: Option[String]): Future[Box[AccountAttribute]] = {
accountAttributeId match {
case Some(id) => Future {
MappedAccountAttribute.find(By(MappedAccountAttribute.mAccountAttributeId, id)) match {
@ -102,6 +103,7 @@ object MappedAccountAttributeProvider extends AccountAttributeProvider {
.mName(name)
.mType(attributeType.toString)
.mValue(value)
.mProductInstanceCode(productInstanceCode.getOrElse(""))
.saveMe()
}
case _ => Empty
@ -116,6 +118,7 @@ object MappedAccountAttributeProvider extends AccountAttributeProvider {
.mName(name)
.mType(attributeType.toString())
.mValue(value)
.mProductInstanceCode(productInstanceCode.getOrElse(""))
.saveMe()
}
}
@ -124,7 +127,8 @@ object MappedAccountAttributeProvider extends AccountAttributeProvider {
override def createAccountAttributes(bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute]): Future[Box[List[AccountAttribute]]] = {
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String]): Future[Box[List[AccountAttribute]]] = {
Future {
tryo {
for {
@ -136,6 +140,7 @@ object MappedAccountAttributeProvider extends AccountAttributeProvider {
.mName(accountAttribute.name)
.mType(accountAttribute.attributeType.toString())
.mValue(accountAttribute.value)
.mProductInstanceCode(productInstanceCode.getOrElse(""))
.saveMe()
}
}
@ -188,6 +193,8 @@ class MappedAccountAttribute extends AccountAttribute with LongKeyedMapper[Mappe
object mType extends MappedString(this, 50)
object mValue extends MappedString(this, 255)
object mProductInstanceCode extends MappedString(this, 255)
override def bankId: BankId = BankId(mBankIdId.get)
@ -203,6 +210,8 @@ class MappedAccountAttribute extends AccountAttribute with LongKeyedMapper[Mappe
override def attributeType: AccountAttributeType.Value = AccountAttributeType.withName(mType.get)
override def value: String = mValue.get
override def productInstanceCode: Option[String] = Some(mProductInstanceCode.get)
}

View File

@ -3590,14 +3590,16 @@ object SwaggerDefinitionsJSON {
val accountAttributeJson = AccountAttributeJson(
name = "OVERDRAFT_START_DATE",
`type` = "DATE_WITH_DAY",
value = "2012-04-23"
value = "2012-04-23",
product_instance_code = Some("LKJL98769F"),
)
val accountAttributeResponseJson = AccountAttributeResponseJson(
product_code = productCodeExample.value,
account_attribute_id = "613c83ea-80f9-4560-8404-b9cd4ec42a7f",
name = "OVERDRAFT_START_DATE",
`type` = "DATE_WITH_DAY",
value = "2012-04-23"
value = "2012-04-23",
product_instance_code = Some("LKJL98769F"),
)
val moderatedAccountJSON310 = ModeratedAccountJSON310(

View File

@ -1748,6 +1748,7 @@ object NewStyle extends MdcLoggable{
name: String,
attributeType: AccountAttributeType.Value,
value: String,
productInstanceCode: Option[String],
callContext: Option[CallContext]
): OBPReturnType[AccountAttribute] = {
Connector.connector.vend.createOrUpdateAccountAttribute(
@ -1758,6 +1759,7 @@ object NewStyle extends MdcLoggable{
name: String,
attributeType: AccountAttributeType.Value,
value: String,
productInstanceCode: Option[String],
callContext: Option[CallContext]
) map {
i => (connectorEmptyResponse(i._1, callContext), i._2)
@ -1847,12 +1849,14 @@ object NewStyle extends MdcLoggable{
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String],
callContext: Option[CallContext]): OBPReturnType[List[AccountAttribute]] = {
Connector.connector.vend.createAccountAttributes(
bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes,
productInstanceCode: Option[String],
callContext: Option[CallContext]
) map {
i => (connectorEmptyResponse(i._1, callContext), i._2)

View File

@ -2764,6 +2764,7 @@ trait APIMethods310 {
postedData.name,
accountAttributeType,
postedData.value,
postedData.product_instance_code,
callContext: Option[CallContext]
)
} yield {
@ -2841,6 +2842,7 @@ trait APIMethods310 {
postedData.name,
accountAttributeType,
postedData.value,
postedData.product_instance_code,
callContext: Option[CallContext]
)
} yield {
@ -5378,6 +5380,7 @@ trait APIMethods310 {
accountId,
ProductCode(accountType),
productAttributes,
None,
callContext: Option[CallContext]
)
} yield {

View File

@ -410,6 +410,7 @@ case class AccountAttributeJson(
name: String,
`type`: String,
value: String,
product_instance_code: Option[String],
)
case class CardAttributeJson(
@ -423,7 +424,8 @@ case class AccountAttributeResponseJson(
account_attribute_id: String,
name: String,
`type`: String,
value: String
value: String,
product_instance_code: Option[String],
)
case class AccountAttributesResponseJson(list: List[AccountAttributeResponseJson])
@ -1245,7 +1247,8 @@ object JSONFactory310{
account_attribute_id = accountAttribute.accountAttributeId,
name = accountAttribute.name,
`type` = accountAttribute.attributeType.toString,
value = accountAttribute.value
value = accountAttribute.value,
product_instance_code = accountAttribute.productInstanceCode
)
}
def createAccountAttributesJson(productsList: List[AccountAttribute]) : AccountAttributesResponseJson = {

View File

@ -523,6 +523,7 @@ trait APIMethods400 {
accountId,
ProductCode("SETTLEMENT"),
productAttributes,
None,
callContext: Option[CallContext]
)
} yield {
@ -2484,6 +2485,7 @@ trait APIMethods400 {
accountId,
ProductCode(accountType),
productAttributes,
None,
callContext: Option[CallContext]
)
} yield {

View File

@ -2129,6 +2129,7 @@ trait Connector extends MdcLoggable {
name: String,
accountAttributeType: AccountAttributeType.Value,
value: String,
productInstanceCode: Option[String],
callContext: Option[CallContext]
): OBPReturnType[Box[AccountAttribute]] = Future{(Failure(setUnimplementedError), callContext)}
@ -2200,6 +2201,7 @@ trait Connector extends MdcLoggable {
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String],
callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] =
Future{(Failure(setUnimplementedError), callContext)}

View File

@ -3731,6 +3731,7 @@ object LocalMappedConnector extends Connector with MdcLoggable {
name: String,
attributeType: AccountAttributeType.Value,
value: String,
productInstanceCode: Option[String],
callContext: Option[CallContext]
): OBPReturnType[Box[AccountAttribute]] = {
AccountAttributeX.accountAttributeProvider.vend.createOrUpdateAccountAttribute(bankId: BankId,
@ -3739,7 +3740,8 @@ object LocalMappedConnector extends Connector with MdcLoggable {
accountAttributeId: Option[String],
name: String,
attributeType: AccountAttributeType.Value,
value: String) map {
value: String,
productInstanceCode: Option[String]) map {
(_, callContext)
}
}
@ -3748,13 +3750,15 @@ object LocalMappedConnector extends Connector with MdcLoggable {
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String],
callContext: Option[CallContext]
): OBPReturnType[Box[List[AccountAttribute]]] = {
AccountAttributeX.accountAttributeProvider.vend.createAccountAttributes(
bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute]) map {
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String]) map {
(_, callContext)
}
}

View File

@ -4835,7 +4835,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String, callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String,
productInstanceCode: Option[String],callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
import com.openbankproject.commons.dto.{InBoundCreateOrUpdateAccountAttribute => InBound, OutBoundCreateOrUpdateAccountAttribute => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, productAttributeId, name, accountAttributeType, value)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)
@ -4948,7 +4949,8 @@ object AkkaConnector_vDec2018 extends Connector with AkkaConnectorActorInit {
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
import com.openbankproject.commons.dto.{InBoundCreateAccountAttributes => InBound, OutBoundCreateAccountAttributes => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, accountAttributes)
val response: Future[Box[InBound]] = (southSideActor ? req).mapTo[InBound].recoverWith(recoverFunction).map(Box !! _)

View File

@ -5021,7 +5021,8 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String, callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String,
productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
import com.openbankproject.commons.dto.{InBoundCreateOrUpdateAccountAttribute => InBound, OutBoundCreateOrUpdateAccountAttribute => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, productAttributeId, name, accountAttributeType, value)
val response: Future[Box[InBound]] = sendRequest[InBound](getUrl(callContext, "createOrUpdateAccountAttribute"), HttpMethods.POST, req, callContext)
@ -5134,7 +5135,8 @@ trait RestConnector_vMar2019 extends Connector with KafkaHelper with MdcLoggable
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
import com.openbankproject.commons.dto.{InBoundCreateAccountAttributes => InBound, OutBoundCreateAccountAttributes => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, accountAttributes)
val response: Future[Box[InBound]] = sendRequest[InBound](getUrl(callContext, "createAccountAttributes"), HttpMethods.POST, req, callContext)

View File

@ -4999,7 +4999,8 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String, callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
override def createOrUpdateAccountAttribute(bankId: BankId, accountId: AccountId, productCode: ProductCode, productAttributeId: Option[String], name: String, accountAttributeType: AccountAttributeType.Value, value: String,
productInstanceCode: Option[String],callContext: Option[CallContext]): OBPReturnType[Box[AccountAttribute]] = {
import com.openbankproject.commons.dto.{InBoundCreateOrUpdateAccountAttribute => InBound, OutBoundCreateOrUpdateAccountAttribute => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, productAttributeId, name, accountAttributeType, value)
val response: Future[Box[InBound]] = sendRequest[InBound]("obp_create_or_update_account_attribute", req, callContext)
@ -5112,7 +5113,8 @@ trait StoredProcedureConnector_vDec2019 extends Connector with MdcLoggable {
adapterImplementation = Some(AdapterImplementation("- Core", 1))
)
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
override def createAccountAttributes(bankId: BankId, accountId: AccountId, productCode: ProductCode, accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String], callContext: Option[CallContext]): OBPReturnType[Box[List[AccountAttribute]]] = {
import com.openbankproject.commons.dto.{InBoundCreateAccountAttributes => InBound, OutBoundCreateAccountAttributes => OutBound}
val req = OutBound(callContext.map(_.toOutboundAdapterCallContext).orNull, bankId, accountId, productCode, accountAttributes)
val response: Future[Box[InBound]] = sendRequest[InBound]("obp_create_account_attributes", req, callContext)

View File

@ -40,14 +40,16 @@ object RemotedataAccountAttribute extends ObpActorInit with AccountAttributeProv
productAttributeId: Option[String],
name: String,
attributeType: AccountAttributeType.Value,
value: String): Future[Box[AccountAttribute]] =
(actor ? cc.createOrUpdateAccountAttribute(bankId, accountId, productCode, productAttributeId , name , attributeType , value )).mapTo[Box[AccountAttribute]]
value: String,
productInstanceCode: Option[String]): Future[Box[AccountAttribute]] =
(actor ? cc.createOrUpdateAccountAttribute(bankId, accountId, productCode, productAttributeId , name , attributeType , value, productInstanceCode )).mapTo[Box[AccountAttribute]]
override def createAccountAttributes(bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
productAttributes: List[ProductAttribute]): Future[Box[List[AccountAttribute]]] =
(actor ? cc.createAccountAttributes(bankId, accountId, productCode, productAttributes)).mapTo[Box[List[AccountAttribute]]]
productAttributes: List[ProductAttribute],
productInstanceCode: Option[String]): Future[Box[List[AccountAttribute]]] =
(actor ? cc.createAccountAttributes(bankId, accountId, productCode, productAttributes, productInstanceCode)).mapTo[Box[List[AccountAttribute]]]
override def deleteAccountAttribute(accountAttributeId: String): Future[Box[Boolean]] =
(actor ? cc.deleteAccountAttribute(accountAttributeId)).mapTo[Box[Boolean]]

View File

@ -44,22 +44,26 @@ class RemotedataAccountAttributeActor extends Actor with ObpActorHelper with Mdc
accountAttributeId: Option[String],
name: String,
attributeType: AccountAttributeType.Value,
value: String) =>
value: String,
productInstanceCode: Option[String]) =>
logger.debug(s"createOrUpdateAccountAttribute(${bankId}, ${accountId}, ${productCode}, ${accountAttributeId}, ${name}, ${attributeType}, ${value})")
mapper.createOrUpdateAccountAttribute(bankId, accountId,
productCode,
accountAttributeId,
name,
attributeType,
value) pipeTo sender
value,
productInstanceCode: Option[String]) pipeTo sender
case cc.createAccountAttributes(bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute]) =>
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String]) =>
mapper.createAccountAttributes(bankId, accountId,
productCode,
accountAttributes) pipeTo sender
accountAttributes,
productInstanceCode: Option[String]) pipeTo sender
case cc.deleteAccountAttribute(accountAttributeId: String) =>
logger.debug(s"deleteAccountAttribute(${accountAttributeId})")

View File

@ -82,7 +82,8 @@ class DeleteAccountCascadeTest extends V400ServerSetup {
account.account_id,
"REQUIRED_CHALLENGE_ANSWERS",
"2",
"INTEGER"
"INTEGER",
Some("LKJL98769F")
)
grantUserAccessToViewViaEndpoint(

View File

@ -84,7 +84,8 @@ class DeleteBankCascadeTest extends V400ServerSetup {
account.account_id,
"REQUIRED_CHALLENGE_ANSWERS",
"2",
"INTEGER"
"INTEGER",
Some("LKJL98769F")
)
grantUserAccessToViewViaEndpoint(

View File

@ -1141,7 +1141,8 @@ class TransactionRequestsTest extends V400ServerSetup with DefaultUsers {
helper.accountId1.value,
"REQUIRED_CHALLENGE_ANSWERS",
"2",
"INTEGER"
"INTEGER",
Some("LKJL98769F")
)
val grantedView = grantUserAccessToViewViaEndpoint(
@ -1389,7 +1390,8 @@ class TransactionRequestsTest extends V400ServerSetup with DefaultUsers {
helper.accountId1.value,
"REQUIRED_CHALLENGE_ANSWERS",
"2",
"INTEGER"
"INTEGER",
Some("LKJL98769F")
)
val grantedView = grantUserAccessToViewViaEndpoint(

View File

@ -151,7 +151,7 @@ trait V400ServerSetup extends ServerSetupWithTestData with DefaultUsers {
product
}
def createAccountAttributeViaEndpoint(bankId: String, accountId: String, name: String, value: String, `type`: String): AccountAttributeResponseJson = {
def createAccountAttributeViaEndpoint(bankId: String, accountId: String, name: String, value: String, `type`: String, productInstanceCode: Option[String]): AccountAttributeResponseJson = {
val putProductJsonV400 = PutProductJsonV400(
name = "product name",
parent_product_code = "",
@ -169,7 +169,8 @@ trait V400ServerSetup extends ServerSetupWithTestData with DefaultUsers {
val accountAttributeJson = AccountAttributeJson(
name = name,
`type` = `type`,
value = value
value = value,
productInstanceCode
)
val entitlement = Entitlement.entitlement.vend.addEntitlement(bankId, resourceUser1.userId, CanCreateAccountAttributeAtOneBank.toString)
val requestCreate310 = (v4_0_0_Request / "banks" / bankId / "accounts" / accountId /

View File

@ -401,7 +401,8 @@ case class OutBoundCreateOrUpdateAccountAttribute(outboundAdapterCallContext: Ou
productAttributeId: Option[String],
name: String,
accountAttributeType: enums.AccountAttributeType.Value,
value: String) extends TopicTrait
value: String,
productInstanceCode: Option[String] = None) extends TopicTrait
case class InBoundCreateOrUpdateAccountAttribute(inboundAdapterCallContext: InboundAdapterCallContext, status: Status, data: AccountAttributeCommons) extends InBoundTrait[AccountAttributeCommons]
@ -585,7 +586,8 @@ case class OutBoundCreateAccountAttributes(outboundAdapterCallContext: OutboundA
bankId: BankId,
accountId: AccountId,
productCode: ProductCode,
accountAttributes: List[ProductAttribute]
accountAttributes: List[ProductAttribute],
productInstanceCode: Option[String] = None,
) extends TopicTrait
case class InBoundCreateAccountAttributes(inboundAdapterCallContext: InboundAdapterCallContext, status: Status, data: List[AccountAttributeCommons]) extends InBoundTrait[List[AccountAttributeCommons]]

View File

@ -91,7 +91,8 @@ case class AccountAttributeCommons(
accountAttributeId :String,
name :String,
attributeType : AccountAttributeType.Value,
value :String) extends AccountAttribute
value :String,
productInstanceCode: Option[String] = None) extends AccountAttribute
object AccountAttributeCommons extends Converter[AccountAttribute, AccountAttributeCommons]

View File

@ -112,6 +112,7 @@ trait AccountAttribute {
def name: String
def attributeType: AccountAttributeType.Value
def value: String
def productInstanceCode: Option[String]
}
trait CardAttribute {