added the new connector Sept2018

This commit is contained in:
hongwei1 2018-09-10 14:44:37 +02:00
parent d680fd7bb8
commit ea1be53877
14 changed files with 2692 additions and 35 deletions

View File

@ -40,7 +40,6 @@ import code.api.v2_0_0.{EntitlementJSON, EntitlementJSONs}
import code.api.v2_0_0.JSONFactory200.{UserJsonV200, UsersJsonV200, createEntitlementJSON}
import code.api.v2_1_0.CustomerCreditRatingJSON
import code.atms.Atms.{Atm, AtmId, AtmT}
import code.bankconnectors.vJune2017.AccountRule
import code.bankconnectors.vMar2017.InboundAdapterInfoInternal
import code.branches.Branches._
import code.customer.Customer

View File

@ -16,6 +16,7 @@ import code.atms.Atms
import code.atms.Atms.{AtmId, AtmT}
import code.bankconnectors.vJune2017.KafkaMappedConnector_vJune2017
import code.bankconnectors.vMar2017.{InboundAdapterInfoInternal, KafkaMappedConnector_vMar2017}
import code.bankconnectors.vSept2018.KafkaMappedConnector_vSept2018
import code.branches.Branches.{Branch, BranchId, BranchT}
import code.customer.Customer
import code.fx.FXRate
@ -78,8 +79,9 @@ object Connector extends SimpleInjector {
case "obpjvm" => ObpJvmMappedConnector
case "kafka" => KafkaMappedConnector
case "kafka_JVMcompatible" => KafkaMappedConnector_JVMcompatible
case "kafka_vJune2017" => KafkaMappedConnector_vJune2017
case "kafka_vMar2017" => KafkaMappedConnector_vMar2017
case "kafka_vJune2017" => KafkaMappedConnector_vJune2017
case "kafka_vSept2018" => KafkaMappedConnector_vSept2018
case matchKafkaVersion(version) => getObjectInstance(s"""code.bankconnectors.KafkaMappedConnector_v${version}""")
}
}
@ -151,6 +153,28 @@ trait Connector extends MdcLoggable{
implicit val nameOfConnector = Connector.getClass.getSimpleName
//Move all the cache ttl to Connector, all the sub-connectors share the same cache.
val bankTTL = getSecondsCache("getBanks")
val banksTTL = getSecondsCache("getBanks")
val userTTL = getSecondsCache("getUser")
val accountTTL = getSecondsCache("getAccount")
val accountsTTL = getSecondsCache("getAccounts")
val transactionTTL = getSecondsCache("getTransaction")
val transactionsTTL = getSecondsCache("getTransactions")
val transactionRequests210TTL = getSecondsCache("getTransactionRequests210")
val counterpartiesTTL = getSecondsCache("getCounterparties")
val counterpartyByCounterpartyIdTTL = getSecondsCache("getCounterpartyByCounterpartyId")
val counterpartyTrait = getSecondsCache("getCounterpartyTrait")
val customersByUserIdBoxTTL = getSecondsCache("getCustomersByUserIdBox")
val memoryCounterpartyTTL = getSecondsCache("createMemoryCounterparty")
val memoryTransactionTTL = getSecondsCache("createMemoryTransaction")
val branchesTTL = getSecondsCache("getBranches")
val branchTTL = getSecondsCache("getBranch")
val atmsTTL = getSecondsCache("getAtms")
val atmTTL = getSecondsCache("getAtm")
val statusOfCheckbookOrders = getSecondsCache("getStatusOfCheckbookOrdersFuture")
val statusOfCreditcardOrders = getSecondsCache("getStatusOfCreditCardOrderFuture")
/**
* This method will return the method name of the current calling method
* @return

View File

@ -30,7 +30,6 @@ import code.api.util.ErrorMessages._
import code.accountholder.AccountHolders
import code.api.util.{APIUtil, CallContext, ErrorMessages}
import code.api.v2_1_0.TransactionRequestCommonBodyJSON
import code.bankconnectors.vJune2017.AccountRule
import code.bankconnectors.vMar2017.{InboundAdapterInfoInternal, KafkaMappedConnector_vMar2017}
import code.branches.Branches.{Branch, BranchT}
import code.fx.{FXRate, fx}

View File

@ -36,7 +36,6 @@ import code.api.util.{APIUtil, CallContext, ErrorMessages}
import code.api.v2_1_0.TransactionRequestCommonBodyJSON
import code.atms.Atms.{AtmId, AtmT}
import code.atms.{Atms, MappedAtm}
import code.bankconnectors.vJune2017.AccountRule
import code.bankconnectors.vMar2017.{InboundAdapterInfoInternal, KafkaMappedConnector_vMar2017}
import code.branches.Branches.{Branch, BranchId, BranchT}
import code.fx.{FXRate, fx}

View File

@ -10,7 +10,6 @@ import code.api.util.ErrorMessages._
import code.accountholder.{AccountHolders, MapperAccountHolders}
import code.api.util.{APIUtil, CallContext, ErrorMessages}
import code.api.v2_1_0.TransactionRequestCommonBodyJSON
import code.bankconnectors.vJune2017.AccountRule
import code.bankconnectors.vMar2017.InboundAdapterInfoInternal
import code.branches.Branches.{Branch, BranchT}
import code.fx.{FXRate, fx}

View File

@ -143,7 +143,7 @@ case class Status(
backendMessages: List[InboundStatusMessage]
)
case class AuthInfo(userId: String = "", username: String ="", cbsToken: String ="", isFirst: Boolean = true, correlationId: String="")
case class AccountRule(scheme: String, value: String)
case class InboundAccountJune2017(
errorCode: String,
cbsToken: String, //TODO, this maybe move to AuthInfo, but it is used in GatewayLogin

View File

@ -64,30 +64,7 @@ import scala.language.postfixOps
trait KafkaMappedConnector_vJune2017 extends Connector with KafkaHelper with MdcLoggable {
// override type AccountType = BankAccountJune2017
implicit override val nameOfConnector = KafkaMappedConnector_vJune2017.toString
val bankTTL = getSecondsCache("getBanks")
val banksTTL = getSecondsCache("getBanks")
val userTTL = getSecondsCache("getUser")
val accountTTL = getSecondsCache("getAccount")
val accountsTTL = getSecondsCache("getAccounts")
val transactionTTL = getSecondsCache("getTransaction")
val transactionsTTL = getSecondsCache("getTransactions")
val transactionRequests210TTL = getSecondsCache("getTransactionRequests210")
val counterpartiesTTL = getSecondsCache("getCounterparties")
val counterpartyByCounterpartyIdTTL = getSecondsCache("getCounterpartyByCounterpartyId")
val counterpartyTrait = getSecondsCache("getCounterpartyTrait")
val customersByUserIdBoxTTL = getSecondsCache("getCustomersByUserIdBox")
val memoryCounterpartyTTL = getSecondsCache("createMemoryCounterparty")
val memoryTransactionTTL = getSecondsCache("createMemoryTransaction")
val branchesTTL = getSecondsCache("getBranches")
val branchTTL = getSecondsCache("getBranch")
val atmsTTL = getSecondsCache("getAtms")
val atmTTL = getSecondsCache("getAtm")
val statusOfCheckbookOrders = getSecondsCache("getStatusOfCheckbookOrdersFuture")
val statusOfCreditcardOrders = getSecondsCache("getStatusOfCreditCardOrderFuture")
// "Versioning" of the messages sent by this or similar connector works like this:
// Use Case Classes (e.g. KafkaInbound... KafkaOutbound... as below to describe the message structures.

View File

@ -35,7 +35,6 @@ import java.util.Date
import code.api.util.APIUtil
import code.api.util.APIUtil.{InboundMessageBase, MessageDoc, OutboundMessageBase}
import code.bankconnectors.InboundUser
import code.bankconnectors.vJune2017.AccountRule
import code.fx.FXRate
import code.metadata.counterparties.CounterpartyTrait
import code.model._

View File

@ -0,0 +1,382 @@
package code.bankconnectors.vSept2018
import java.lang
import java.util.Date
import code.api.util.APIUtil
import code.api.util.APIUtil.InboundMessageBase
import code.api.v3_1_0.CheckbookOrdersJson
import code.atms.Atms.{AtmId, AtmT}
import code.bankconnectors._
import code.bankconnectors.vMar2017._
import code.branches.Branches._
import code.common.{Address, Location, Meta, Routing}
import code.customer.{CreditLimit, CreditRating, Customer, CustomerFaceImage}
import code.kafka.Topics._
import code.metadata.counterparties.CounterpartyTrait
import code.model.dataAccess.MappedBankAccountData
import code.model.{AmountOfMoney => _, _}
import code.transactionrequests.TransactionRequests.TransactionRequest
import net.liftweb.mapper.By
import net.liftweb.util.Helpers.today
import scala.collection.immutable.List
/**
* case classes used to define topics, these are outbound kafka messages
*/
case class OutboundGetAdapterInfo(date: String) extends TopicTrait
case class OutboundGetBanks(authInfo: AuthInfo) extends TopicTrait
case class OutboundGetBank(authInfo: AuthInfo, bankId: String) extends TopicTrait
case class OutboundGetUserByUsernamePassword(authInfo: AuthInfo, password: String) extends TopicTrait
case class OutboundGetAccounts(authInfo: AuthInfo, callMfFlag: Boolean, customers:InternalBasicCustomers) extends TopicTrait
case class OutboundGetAccountbyAccountID(authInfo: AuthInfo, bankId: String, accountId: String)extends TopicTrait
case class OutboundCheckBankAccountExists(authInfo: AuthInfo, bankId: String, accountId: String)extends TopicTrait
case class OutboundGetCoreBankAccounts(authInfo: AuthInfo, bankIdAccountIds: List[BankIdAccountId])extends TopicTrait
case class OutboundGetTransactions(authInfo: AuthInfo,bankId: String, accountId: String, limit: Int, fromDate: String, toDate: String) extends TopicTrait
case class OutboundGetTransaction(authInfo: AuthInfo, bankId: String, accountId: String, transactionId: String) extends TopicTrait
case class OutboundGetBranches(authInfo: AuthInfo,bankId: String) extends TopicTrait
case class OutboundGetBranch(authInfo: AuthInfo, bankId: String, branchId: String)extends TopicTrait
case class OutboundGetAtms(authInfo: AuthInfo,bankId: String) extends TopicTrait
case class OutboundGetAtm(authInfo: AuthInfo,bankId: String, atmId: String) extends TopicTrait
case class OutboundCreateChallengeSept2018(
authInfo: AuthInfo,
bankId: String,
accountId: String,
userId: String,
username: String,
transactionRequestType: String,
transactionRequestId: String
) extends TopicTrait
case class OutboundCreateCounterparty(
authInfo: AuthInfo,
counterparty: OutboundCounterparty
) extends TopicTrait
case class OutboundGetTransactionRequests210(
authInfo: AuthInfo,
counterparty: OutboundTransactionRequests
) extends TopicTrait
case class OutboundGetCounterparties(
authInfo: AuthInfo,
counterparty: InternalOutboundGetCounterparties
) extends TopicTrait
case class OutboundGetCounterpartyByCounterpartyId(
authInfo: AuthInfo,
counterparty: OutboundGetCounterpartyById
) extends TopicTrait
case class OutboundGetCounterparty(authInfo: AuthInfo, thisBankId: String, thisAccountId: String, counterpartyId: String) extends TopicTrait
case class OutboundGetCustomersByUserId(
authInfo: AuthInfo
) extends TopicTrait
case class OutboundGetCheckbookOrderStatus(
authInfo: AuthInfo,
bankId: String,
accountId: String,
originatorApplication: String,
originatorStationIP: String,
primaryAccount: String
)extends TopicTrait
case class OutboundGetCreditCardOrderStatus(
authInfo: AuthInfo,
bankId: String,
accountId: String,
originatorApplication: String,
originatorStationIP: String,
primaryAccount: String
)extends TopicTrait
/**
* case classes used in Kafka message, these are InBound Kafka messages
*/
//AdapterInfo has no AuthInfo, because it just get data from Adapter, no need for AuthInfo
case class InboundAdapterInfo(data: InboundAdapterInfoInternal)
case class InboundGetUserByUsernamePassword(authInfo: AuthInfo, data: InboundValidatedUser)
case class InboundGetBanks(authInfo: AuthInfo, status: Status,data: List[InboundBank])
case class InboundGetBank(authInfo: AuthInfo, status: Status, data: InboundBank)
case class InboundGetAccounts(authInfo: AuthInfo, status: Status, data: List[InboundAccountSept2018])
case class InboundGetAccountbyAccountID(authInfo: AuthInfo, status: Status, data: Option[InboundAccountSept2018])
case class InboundCheckBankAccountExists(authInfo: AuthInfo, status: Status, data: Option[InboundAccountSept2018])
case class InboundGetCoreBankAccounts(authInfo: AuthInfo, data: List[InternalInboundCoreAccount])
case class InboundGetTransactions(authInfo: AuthInfo, status: Status, data: List[InternalTransaction_vSept2018])
case class InboundGetTransaction(authInfo: AuthInfo, status: Status, data: Option[InternalTransaction_vSept2018])
case class InboundCreateChallengeSept2018(authInfo: AuthInfo, data: InternalCreateChallengeSept2018)
case class InboundCreateCounterparty(authInfo: AuthInfo, status: Status, data: Option[InternalCounterparty])
case class InboundGetTransactionRequests210(authInfo: AuthInfo, status: Status, data: List[TransactionRequest])
case class InboundGetCounterparties(authInfo: AuthInfo, status: Status, data: List[InternalCounterparty])
case class InboundGetCounterparty(authInfo: AuthInfo, status: Status, data: Option[InternalCounterparty])
case class InboundGetCustomersByUserId(authInfo: AuthInfo, status: Status, data: List[InternalCustomer])
case class InboundGetBranches(authInfo: AuthInfo,status: Status,data: List[InboundBranchVSept2018])
case class InboundGetBranch(authInfo: AuthInfo,status: Status, data: Option[InboundBranchVSept2018])
case class InboundGetAtms(authInfo: AuthInfo, status: Status, data: List[InboundAtmSept2018])
case class InboundGetAtm(authInfo: AuthInfo, status: Status, data: Option[InboundAtmSept2018])
case class InboundGetChecksOrderStatus(authInfo: AuthInfo, status: Status, data: CheckbookOrdersJson)
case class InboundGetCreditCardOrderStatus(authInfo: AuthInfo, status: Status, data: List[InboundCardDetails])
////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// These are case classes, used in internal message mapping
case class InternalInboundCoreAccount(
errorCode: String,
backendMessages: List[InboundStatusMessage],
id : String,
label : String,
bankId : String,
accountType: String,
accountRoutings: List[AccountRouting]
)
case class Status(
errorCode: String,
backendMessages: List[InboundStatusMessage]
)
case class AuthInfo(userId: String = "", username: String ="", cbsToken: String ="", isFirst: Boolean = true, correlationId: String="")
case class InboundAccountSept2018(
errorCode: String,
cbsToken: String, //TODO, this maybe move to AuthInfo, but it is used in GatewayLogin
bankId: String,
branchId: String,
accountId: String,
accountNumber: String,
accountType: String,
balanceAmount: String,
balanceCurrency: String,
owners: List[String],
viewsToGenerate: List[String],
bankRoutingScheme: String,
bankRoutingAddress: String,
branchRoutingScheme: String,
branchRoutingAddress: String,
accountRoutingScheme: String,
accountRoutingAddress: String,
accountRouting: List[AccountRouting],
accountRules: List[AccountRule]
) extends InboundMessageBase with InboundAccountCommon
case class BankAccountSept2018(r: InboundAccountSept2018) extends BankAccount {
def accountId: AccountId = AccountId(r.accountId)
def accountType: String = r.accountType
def balance: BigDecimal = BigDecimal(r.balanceAmount)
def currency: String = r.balanceCurrency
def name: String = r.owners.head
// Note: swift_bic--> swiftBic, but it extends from BankAccount
def swift_bic: Option[String] = Some("swift_bic")
// Note: deprecated, extends from BankAccount
def iban: Option[String] = Some("iban")
def number: String = r.accountNumber
def bankId: BankId = BankId(r.bankId)
def lastUpdate: Date = APIUtil.DateWithMsFormat.parse(today.getTime.toString)
def accountHolder: String = r.owners.head
// Fields modifiable from OBP are stored in mapper
def label: String = (for {
d <- MappedBankAccountData.find(By(MappedBankAccountData.accountId, r.accountId))
} yield {
d.getLabel
}).getOrElse(r.accountNumber)
def accountRoutingScheme: String = r.accountRoutingScheme
def accountRoutingAddress: String = r.accountRoutingAddress
def accountRoutings: List[AccountRouting] = List()
def branchId: String = r.branchId
def accountRules: List[AccountRule] = r.accountRules
}
case class InternalBasicCustomer(
bankId:String,
customerId: String,
customerNumber: String,
legalName: String,
dateOfBirth: Date
)
case class InternalBasicCustomers(customers: List[InternalBasicCustomer])
case class InternalCreateChallengeSept2018(
errorCode: String,
backendMessages: List[InboundStatusMessage],
answer : String
)
case class InternalGetTransactionRequests(
errorCode: String,
backendMessages: List[InboundStatusMessage],
transactionRequests:List[TransactionRequest]
)
case class OutboundCounterparty(
name: String,
description: String,
createdByUserId: String,
thisBankId: String,
thisAccountId: String,
thisViewId: String,
otherAccountRoutingScheme: String,
otherAccountRoutingAddress: String,
otherAccountSecondaryRoutingScheme: String,
otherAccountSecondaryRoutingAddress: String,
otherBankRoutingScheme: String,
otherBankRoutingAddress: String,
otherBranchRoutingScheme: String,
otherBranchRoutingAddress: String,
isBeneficiary:Boolean,
bespoke: List[CounterpartyBespoke]
)
case class InternalOutboundGetCounterparties(
thisBankId: String,
thisAccountId: String,
viewId :String
)
case class OutboundGetCounterpartyById(
counterpartyId : String
)
case class OutboundTransactionRequests(
accountId: String,
accountType: String,
currency: String,
iban: String,
number: String,
bankId: String,
branchId: String,
accountRoutingScheme: String,
accountRoutingAddress: String
)
case class InternalCounterparty(
createdByUserId: String,
name: String,
thisBankId: String,
thisAccountId: String,
thisViewId: String,
counterpartyId: String,
otherAccountRoutingScheme: String,
otherAccountRoutingAddress: String,
otherBankRoutingScheme: String,
otherBankRoutingAddress: String,
otherBranchRoutingScheme: String,
otherBranchRoutingAddress: String,
isBeneficiary: Boolean,
description: String,
otherAccountSecondaryRoutingScheme: String,
otherAccountSecondaryRoutingAddress: String,
bespoke: List[CounterpartyBespoke]) extends CounterpartyTrait
case class InternalCustomer(customerId: String, bankId: String, number: String, legalName: String, mobileNumber: String, email: String, faceImage: CustomerFaceImage, dateOfBirth: Date, relationshipStatus: String, dependents: Integer, dobOfDependents: List[Date], highestEducationAttained: String, employmentStatus: String, creditRating: CreditRating, creditLimit: CreditLimit, kycStatus: lang.Boolean, lastOkDate: Date) extends Customer
case class InboundBranchVSept2018(
branchId: BranchId,
bankId: BankId,
name: String,
address: Address,
location: Location,
lobbyString: Option[LobbyString],
driveUpString: Option[DriveUpString],
meta: Meta,
branchRouting: Option[Routing],
lobby: Option[Lobby],
driveUp: Option[DriveUp],
// Easy access for people who use wheelchairs etc.
isAccessible : Option[Boolean],
accessibleFeatures: Option[String],
branchType : Option[String],
moreInfo : Option[String],
phoneNumber : Option[String]
) extends BranchT
case class InboundAtmSept2018(
atmId : AtmId,
bankId : BankId,
name : String,
address : Address,
location : Location,
meta : Meta,
OpeningTimeOnMonday : Option[String],
ClosingTimeOnMonday : Option[String],
OpeningTimeOnTuesday : Option[String],
ClosingTimeOnTuesday : Option[String],
OpeningTimeOnWednesday : Option[String],
ClosingTimeOnWednesday : Option[String],
OpeningTimeOnThursday : Option[String],
ClosingTimeOnThursday: Option[String],
OpeningTimeOnFriday : Option[String],
ClosingTimeOnFriday : Option[String],
OpeningTimeOnSaturday : Option[String],
ClosingTimeOnSaturday : Option[String],
OpeningTimeOnSunday: Option[String],
ClosingTimeOnSunday : Option[String],
isAccessible : Option[Boolean],
locatedAt : Option[String],
moreInfo : Option[String],
hasDepositCapability : Option[Boolean]
) extends AtmT
case class InternalTransaction_vSept2018(
transactionId: String,
accountId: String,
amount: String,
bankId: String,
completedDate: String,
counterpartyId: String,
counterpartyName: String,
currency: String,
description: String,
newBalanceAmount: String,
newBalanceCurrency: String,
postedDate: String,
`type`: String,
userId: String
)
case class InboundCardDetails(
orderId: String,
creditCardType: String,
cardDescription: String,
useType: String,
orderDate: String,
deliveryStatus: String,
statusDate: String,
branch: String
)
object JsonFactory_vSept2018 {
def createCustomerJson(customer : Customer) : InternalBasicCustomer = {
InternalBasicCustomer(
bankId=customer.bankId,
customerId = customer.customerId,
customerNumber = customer.number,
legalName = customer.legalName,
dateOfBirth = customer.dateOfBirth
)
}
def createCustomersJson(customers : List[Customer]) : InternalBasicCustomers = {
InternalBasicCustomers(customers.map(createCustomerJson))
}
}

File diff suppressed because it is too large Load Diff

View File

@ -36,7 +36,6 @@ import code.api.util.ErrorMessages._
import code.accountholder.AccountHolders
import code.api.util.APIUtil.hasEntitlement
import code.api.util.{APIUtil, ApiRole, CallContext, ErrorMessages}
import code.bankconnectors.vJune2017.AccountRule
import code.bankconnectors.{Connector, OBPQueryParam}
import code.metadata.comments.Comments
import code.metadata.counterparties.{Counterparties, CounterpartyTrait}
@ -809,6 +808,11 @@ case class Iban(
val iban: String
)
case class AccountRule(
scheme: String,
value: String
)
case class AccountRouting(
scheme: String,
address: String

View File

@ -35,7 +35,6 @@ import java.util.Date
import code.api.util.APIUtil
import code.api.util.ErrorMessages.NoViewPermission
import code.bankconnectors.vJune2017.AccountRule
import code.model.Moderation.Moderated
import code.util.Helper
import net.liftweb.common.{Box, Failure}

View File

@ -34,7 +34,6 @@ package code.model.dataAccess
import java.util.Date
import code.bankconnectors.vJune2017.AccountRule
import code.bankconnectors.{OBPLimit, OBPOffset, OBPOrdering, _}
import code.model._
import code.util.Helper

View File

@ -1,8 +1,6 @@
package code.model.dataAccess
import java.util.Date
import code.bankconnectors.vJune2017.AccountRule
import code.model._
import code.util.{AccountIdString, Helper, MappedAccountNumber, UUIDString}
import net.liftweb.mapper._