mirror of
https://github.com/OpenBankProject/OBP-API.git
synced 2026-02-06 16:56:56 +00:00
feature/OBPV500 CustomerAccountLink endpoints - step2: added CURD endpoints
This commit is contained in:
parent
403d79c03e
commit
2d1c584a99
@ -4832,6 +4832,26 @@ object SwaggerDefinitionsJSON {
|
||||
card_attributes = List(cardAttributeCommons),
|
||||
brand = brandExample.value
|
||||
)
|
||||
|
||||
val createCustomerAccountLinkJson = CreateCustomerAccountLinkJson(
|
||||
customer_id = customerIdExample.value,
|
||||
account_id = accountIdExample.value,
|
||||
relationship_type= relationshipTypeExample.value
|
||||
)
|
||||
val updateCustomerAccountLinkJson = UpdateCustomerAccountLinkJson(
|
||||
relationship_type= relationshipTypeExample.value
|
||||
)
|
||||
|
||||
val customerAccountLinkJson = CustomerAccountLinkJson(
|
||||
customer_account_link_id = customerAccountLinkIdExample.value,
|
||||
customer_id = customerIdExample.value,
|
||||
account_id = accountIdExample.value,
|
||||
relationship_type= relationshipTypeExample.value
|
||||
)
|
||||
|
||||
val customerAccountLinksJson = CustomerAccountLinksJson(
|
||||
List(customerAccountLinkJson)
|
||||
)
|
||||
//The common error or success format.
|
||||
//Just some helper format to use in Json
|
||||
case class NotSupportedYet()
|
||||
|
||||
@ -243,6 +243,21 @@ object ApiRole {
|
||||
|
||||
case class CanGetCardsForBank(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canGetCardsForBank = CanGetCardsForBank()
|
||||
|
||||
case class CanCreateCustomerAccountLink(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canCreateCustomerAccountLink = CanCreateCustomerAccountLink()
|
||||
|
||||
case class CanUpdateCustomerAccountLink(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canUpdateCustomerAccountLink = CanUpdateCustomerAccountLink()
|
||||
|
||||
case class CanDeleteCustomerAccountLink(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canDeleteCustomerAccountLink = CanDeleteCustomerAccountLink()
|
||||
|
||||
case class CanGetCustomerAccountLink(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canGetCustomerAccountLink = CanGetCustomerAccountLink()
|
||||
|
||||
case class CanGetCustomerAccountLinks(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canGetCustomerAccountLinks = CanGetCustomerAccountLinks()
|
||||
|
||||
case class CanCreateBranch(requiresBankId: Boolean = true) extends ApiRole
|
||||
lazy val canCreateBranch = CanCreateBranch()
|
||||
|
||||
@ -429,6 +429,12 @@ object ErrorMessages {
|
||||
val EntitlementCannotBeGrantedGrantorIssue = "OBP-30221: Entitlement cannot be granted due to the grantor's insufficient privileges."
|
||||
|
||||
val CounterpartyNotFoundByRoutings = "OBP-30222: Counterparty not found. Please specify valid value for Routings."
|
||||
val AccountAlreadyExistsForCustomer = "OBP-30223: The Account is already linked to a Customer at the bank specified by BANK_ID"
|
||||
val CreateCustomerAccountLinkError = "OBP-30224: Could not create the customer account link."
|
||||
val CustomerAccountLinkNotFoundById = "OBP-30225: Customer Account Link not found. Please specify valid values for CUSTOMER_ACCOUNT_LINK_ID."
|
||||
val GetCustomerAccountLinksError = "OBP-30226: Could not get the customer account links."
|
||||
val UpdateCustomerAccountLinkError = "OBP-30227: Could not update the customer account link."
|
||||
val DeleteCustomerAccountLinkError = "OBP-30227: Could not delete the customer account link."
|
||||
|
||||
val CreateSystemViewError = "OBP-30250: Could not create the system view"
|
||||
val DeleteSystemViewError = "OBP-30251: Could not delete the system view"
|
||||
|
||||
@ -40,7 +40,10 @@ object ExampleValue {
|
||||
lazy val sessionIdExample = ConnectorField("b4e0352a-9a0f-4bfa-b30b-9003aa467f50", s"A string that MUST uniquely identify the session on this OBP instance, can be used in all cache. ")
|
||||
|
||||
lazy val userIdExample = ConnectorField("9ca9a7e4-6d02-40e3-a129-0b2bf89de9b1", s"A string that MUST uniquely identify the user on this OBP instance.")
|
||||
glossaryItems += makeGlossaryItem("User.userId", userIdExample)
|
||||
glossaryItems += makeGlossaryItem("User.userId", userIdExample)
|
||||
|
||||
lazy val relationshipTypeExample = ConnectorField("Owner", s"Relationship between two parties.")
|
||||
glossaryItems += makeGlossaryItem("Customer.relationshipType", relationshipTypeExample)
|
||||
|
||||
|
||||
lazy val usernameExample = ConnectorField("felixsmith", s"The username the user uses to authenticate.")
|
||||
@ -59,6 +62,9 @@ object ExampleValue {
|
||||
|
||||
lazy val customerIdExample = ConnectorField("7uy8a7e4-6d02-40e3-a129-0b2bf89de8uh", s"A non human friendly string that identifies the customer and is used in URLs. This SHOULD NOT be the customer number. The combination of customerId and bankId MUST be unique on an OBP instance. customerId SHOULD be unique on an OBP instance. Ideally customerId is a UUID. A mapping between customer number and customer id is kept in OBP.")
|
||||
glossaryItems += makeGlossaryItem("Customer.customerId", customerIdExample)
|
||||
|
||||
lazy val customerAccountLinkIdExample = ConnectorField("xyz8a7e4-6d02-40e3-a129-0b2bf89de8uh", s"A non human friendly string that identifies the customer Account Link and is used in URLs. ")
|
||||
glossaryItems += makeGlossaryItem("Customer.customerAccountLinkId", customerAccountLinkIdExample)
|
||||
|
||||
lazy val customerAttributeId = ConnectorField("7uy8a7e4-6d02-40e3-a129-0b2bf89de8uh", s"A non human friendly string that identifies the customer attribute and is used in URLs.")
|
||||
glossaryItems += makeGlossaryItem("Customer.customerAttributeId", customerAttributeId)
|
||||
|
||||
@ -3,7 +3,6 @@ package code.api.util
|
||||
|
||||
import java.util.Date
|
||||
import java.util.UUID.randomUUID
|
||||
|
||||
import akka.http.scaladsl.model.HttpMethod
|
||||
import code.DynamicEndpoint.{DynamicEndpointProvider, DynamicEndpointT}
|
||||
import code.api.{APIFailureNewStyle, Constant, JsonResponseException}
|
||||
@ -69,6 +68,7 @@ import code.api.v4_0_0.JSONFactory400
|
||||
import code.api.dynamic.endpoint.helper.DynamicEndpointHelper
|
||||
import code.bankattribute.BankAttribute
|
||||
import code.connectormethod.{ConnectorMethodProvider, JsonConnectorMethod}
|
||||
import code.customeraccountlinks.CustomerAccountLinkTrait
|
||||
import code.dynamicMessageDoc.{DynamicMessageDocProvider, JsonDynamicMessageDoc}
|
||||
import code.dynamicResourceDoc.{DynamicResourceDocProvider, JsonDynamicResourceDoc}
|
||||
import code.endpointMapping.{EndpointMappingProvider, EndpointMappingT}
|
||||
@ -3740,5 +3740,36 @@ object NewStyle extends MdcLoggable{
|
||||
i => (connectorEmptyResponse(i._1, callContext), i._2)
|
||||
}
|
||||
}
|
||||
|
||||
def createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String, callContext: Option[CallContext]): OBPReturnType[CustomerAccountLinkTrait] =
|
||||
Connector.connector.vend.createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String, callContext: Option[CallContext]) map {
|
||||
i => (unboxFullOrFail(i._1, callContext, CreateCustomerAccountLinkError), i._2)
|
||||
}
|
||||
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String, callContext: Option[CallContext]): OBPReturnType[List[CustomerAccountLinkTrait]] =
|
||||
Connector.connector.vend.getCustomerAccountLinksByCustomerId(customerId: String, callContext: Option[CallContext]) map {
|
||||
i => (unboxFullOrFail(i._1, callContext, GetCustomerAccountLinksError), i._2)
|
||||
}
|
||||
|
||||
def getCustomerAccountLinksByAccountId(accountId: String, callContext: Option[CallContext]): OBPReturnType[List[CustomerAccountLinkTrait]] =
|
||||
Connector.connector.vend.getCustomerAccountLinksByAccountId(accountId: String, callContext: Option[CallContext]) map {
|
||||
i => (unboxFullOrFail(i._1, callContext, GetCustomerAccountLinksError), i._2)
|
||||
}
|
||||
|
||||
def getCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]): OBPReturnType[CustomerAccountLinkTrait] =
|
||||
Connector.connector.vend.getCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]) map {
|
||||
i => (unboxFullOrFail(i._1, callContext, CustomerAccountLinkNotFoundById), i._2)
|
||||
}
|
||||
|
||||
def deleteCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]): OBPReturnType[Boolean] =
|
||||
Connector.connector.vend.deleteCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]) map {
|
||||
i => (unboxFullOrFail(i._1, callContext, DeleteCustomerAccountLinkError), i._2)
|
||||
}
|
||||
|
||||
def updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String, callContext: Option[CallContext]): OBPReturnType[CustomerAccountLinkTrait] =
|
||||
Connector.connector.vend.updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String, callContext: Option[CallContext]) map {
|
||||
i => (unboxFullOrFail(i._1, callContext, UpdateCustomerAccountLinkError), i._2)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package code.api.v5_0_0
|
||||
|
||||
import java.util.Date
|
||||
|
||||
import code.api.ResourceDocs1_4_0.SwaggerDefinitionsJSON._
|
||||
import code.api.util.APIUtil._
|
||||
import code.api.util.ApiRole._
|
||||
@ -38,6 +37,7 @@ import net.liftweb.util.Props
|
||||
import java.util.concurrent.ThreadLocalRandom
|
||||
|
||||
import code.accountattribute.AccountAttributeX
|
||||
import code.util.Helper.booleanToFuture
|
||||
|
||||
import scala.collection.immutable.{List, Nil}
|
||||
import scala.collection.mutable.ArrayBuffer
|
||||
@ -1398,6 +1398,235 @@ trait APIMethods500 {
|
||||
}
|
||||
}
|
||||
|
||||
staticResourceDocs += ResourceDoc(
|
||||
createCustomerAccountLink,
|
||||
implementedInApiVersion,
|
||||
nameOf(createCustomerAccountLink),
|
||||
"POST",
|
||||
"/banks/BANK_ID/customer_account_links",
|
||||
"Create Customer Account Link",
|
||||
s"""Link a Customer to a Account
|
||||
|
|
||||
|${authenticationRequiredMessage(true)}
|
||||
|
|
||||
|""",
|
||||
createCustomerAccountLinkJson,
|
||||
customerAccountLinkJson,
|
||||
List(
|
||||
$UserNotLoggedIn,
|
||||
$BankNotFound,
|
||||
BankAccountNotFound,
|
||||
InvalidJsonFormat,
|
||||
CustomerNotFoundByCustomerId,
|
||||
UserHasMissingRoles,
|
||||
AccountAlreadyExistsForCustomer,
|
||||
CreateCustomerAccountLinkError,
|
||||
UnknownError
|
||||
),
|
||||
List(apiTagCustomer, apiTagAccount),
|
||||
Some(List(canCreateCustomerAccountLink)))
|
||||
lazy val createCustomerAccountLink : OBPEndpoint = {
|
||||
case "banks" :: BankId(bankId):: "customer_account_links" :: Nil JsonPost json -> _ => {
|
||||
cc =>
|
||||
for {
|
||||
postedData <- NewStyle.function.tryons(s"$InvalidJsonFormat The Json body should be the $CreateCustomerAccountLinkJson ", 400, cc.callContext) {
|
||||
json.extract[CreateCustomerAccountLinkJson]
|
||||
}
|
||||
(customer, callContext) <- NewStyle.function.getCustomerByCustomerId(postedData.customer_id, cc.callContext)
|
||||
_ <- booleanToFuture(s"Bank of the customer specified by the CUSTOMER_ID(${customer.bankId}) has to matches BANK_ID(${bankId.value}) in URL", 400, callContext) {
|
||||
customer.bankId == bankId.value
|
||||
}
|
||||
(_, callContext) <- NewStyle.function.getBankAccount(bankId, AccountId(postedData.account_id), callContext)
|
||||
_ <- booleanToFuture("Field customer_id is not defined in the posted json!", 400, callContext) {
|
||||
postedData.customer_id.nonEmpty
|
||||
}
|
||||
(customerAccountLinkExists, callContext) <- Connector.connector.vend.getCustomerAccountLink(postedData.customer_id, postedData.account_id, callContext)
|
||||
_ <- booleanToFuture(AccountAlreadyExistsForCustomer, 400, callContext) {
|
||||
customerAccountLinkExists.isEmpty
|
||||
}
|
||||
(customerAccountLink, callContext) <- NewStyle.function.createCustomerAccountLink(postedData.customer_id, postedData.account_id, postedData.relationship_type, callContext)
|
||||
} yield {
|
||||
(JSONFactory500.createCustomerAccountLinkJson(customerAccountLink), HttpCode.`201`(callContext))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticResourceDocs += ResourceDoc(
|
||||
getCustomerAccountLinksByCustomerId,
|
||||
implementedInApiVersion,
|
||||
nameOf(getCustomerAccountLinksByCustomerId),
|
||||
"GET",
|
||||
"/banks/BANK_ID/customers/CUSTOMER_ID/customer_account_links",
|
||||
"Get Customer Account Links by CUSTOMER_ID",
|
||||
s""" Get Customer Account Links by CUSTOMER_ID
|
||||
|
|
||||
|${authenticationRequiredMessage(true)}
|
||||
|
|
||||
|""",
|
||||
EmptyBody,
|
||||
customerAccountLinksJson,
|
||||
List(
|
||||
$UserNotLoggedIn,
|
||||
$BankNotFound,
|
||||
CustomerNotFoundByCustomerId,
|
||||
UserHasMissingRoles,
|
||||
UnknownError
|
||||
),
|
||||
List(apiTagCustomer, apiTagNewStyle),
|
||||
Some(List(canGetCustomerAccountLinks)))
|
||||
lazy val getCustomerAccountLinksByCustomerId : OBPEndpoint = {
|
||||
case "banks" :: BankId(bankId) :: "customers" :: customerId :: "customer_account_links" :: Nil JsonGet _ => {
|
||||
cc =>
|
||||
for {
|
||||
(customer, callContext) <- NewStyle.function.getCustomerByCustomerId(customerId, cc.callContext)
|
||||
_ <- booleanToFuture(s"Bank of the customer specified by the CUSTOMER_ID(${customer.bankId}) has to matches BANK_ID(${bankId.value}) in URL", 400, callContext) {
|
||||
customer.bankId == bankId.value
|
||||
}
|
||||
(customerAccountLinks, callContext) <- NewStyle.function.getCustomerAccountLinksByCustomerId(customerId, callContext)
|
||||
} yield {
|
||||
(JSONFactory500.createCustomerAccountLinksJon(customerAccountLinks), HttpCode.`200`(callContext))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticResourceDocs += ResourceDoc(
|
||||
getCustomerAccountLinksByAccountId,
|
||||
implementedInApiVersion,
|
||||
nameOf(getCustomerAccountLinksByAccountId),
|
||||
"GET",
|
||||
"/banks/BANK_ID/accounts/ACCOUNT_ID/customer_account_links",
|
||||
"Get Customer Account Links by ACCOUNT_ID",
|
||||
s""" Get Customer Account Links by ACCOUNT_ID
|
||||
|
|
||||
|${authenticationRequiredMessage(true)}
|
||||
|
|
||||
|""",
|
||||
EmptyBody,
|
||||
customerAccountLinksJson,
|
||||
List(
|
||||
$UserNotLoggedIn,
|
||||
$BankNotFound,
|
||||
BankAccountNotFound,
|
||||
UserHasMissingRoles,
|
||||
UnknownError
|
||||
),
|
||||
List(apiTagCustomer, apiTagNewStyle),
|
||||
Some(List(canGetCustomerAccountLinks)))
|
||||
lazy val getCustomerAccountLinksByAccountId : OBPEndpoint = {
|
||||
case "banks" :: BankId(bankId) :: "accounts" :: accountId :: "customer_account_links" :: Nil JsonGet _ => {
|
||||
cc =>
|
||||
for {
|
||||
(customerAccountLinks, callContext) <- NewStyle.function.getCustomerAccountLinksByAccountId(accountId, cc.callContext)
|
||||
} yield {
|
||||
(JSONFactory500.createCustomerAccountLinksJon(customerAccountLinks), HttpCode.`200`(callContext))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticResourceDocs += ResourceDoc(
|
||||
getCustomerAccountLinkById,
|
||||
implementedInApiVersion,
|
||||
nameOf(getCustomerAccountLinkById),
|
||||
"GET",
|
||||
"/banks/BANK_ID/customer_account_links/CUSTOMER_ACCOUNT_LINK_ID",
|
||||
"Get Customer Account Link by Id",
|
||||
s""" Get Customer Account Link by CUSTOMER_ACCOUNT_LINK_ID
|
||||
|
|
||||
|${authenticationRequiredMessage(true)}
|
||||
|
|
||||
|""",
|
||||
EmptyBody,
|
||||
customerAccountLinkJson,
|
||||
List(
|
||||
$UserNotLoggedIn,
|
||||
$BankNotFound,
|
||||
UserHasMissingRoles,
|
||||
UnknownError
|
||||
),
|
||||
List(apiTagCustomer, apiTagNewStyle),
|
||||
Some(List(canGetCustomerAccountLink)))
|
||||
lazy val getCustomerAccountLinkById : OBPEndpoint = {
|
||||
case "banks" :: BankId(bankId) :: "customer_account_links" :: customerAccountLinkId :: Nil JsonGet _ => {
|
||||
cc =>
|
||||
for {
|
||||
(customerAccountLink, callContext) <- NewStyle.function.getCustomerAccountLinkById(customerAccountLinkId, cc.callContext)
|
||||
} yield {
|
||||
(JSONFactory500.createCustomerAccountLinkJson(customerAccountLink), HttpCode.`200`(callContext))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticResourceDocs += ResourceDoc(
|
||||
updateCustomerAccountLinkById,
|
||||
implementedInApiVersion,
|
||||
nameOf(updateCustomerAccountLinkById),
|
||||
"PUT",
|
||||
"/banks/BANK_ID/customer_account_links/CUSTOMER_ACCOUNT_LINK_ID",
|
||||
"Update Customer Account Link by Id",
|
||||
s""" Update Customer Account Link by CUSTOMER_ACCOUNT_LINK_ID
|
||||
|
|
||||
|${authenticationRequiredMessage(true)}
|
||||
|
|
||||
|""",
|
||||
EmptyBody,
|
||||
customerAccountLinkJson,
|
||||
List(
|
||||
$UserNotLoggedIn,
|
||||
$BankNotFound,
|
||||
UserHasMissingRoles,
|
||||
UnknownError
|
||||
),
|
||||
List(apiTagCustomer, apiTagNewStyle),
|
||||
Some(List(canUpdateCustomerAccountLink)))
|
||||
lazy val updateCustomerAccountLinkById : OBPEndpoint = {
|
||||
case "banks" :: BankId(bankId) :: "customer_account_links" :: customerAccountLinkId :: Nil JsonPut json -> _ => {
|
||||
cc =>
|
||||
for {
|
||||
postedData <- NewStyle.function.tryons(s"$InvalidJsonFormat The Json body should be the $UpdateCustomerAccountLinkJson ", 400, cc.callContext) {
|
||||
json.extract[CreateCustomerAccountLinkJson]
|
||||
}
|
||||
(_, callContext) <- NewStyle.function.getCustomerAccountLinkById(customerAccountLinkId, cc.callContext)
|
||||
|
||||
(customerAccountLink, callContext) <- NewStyle.function.updateCustomerAccountLinkById(customerAccountLinkId, postedData.relationship_type, callContext)
|
||||
} yield {
|
||||
(JSONFactory500.createCustomerAccountLinkJson(customerAccountLink), HttpCode.`200`(callContext))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
staticResourceDocs += ResourceDoc(
|
||||
deleteCustomerAccountLinkById,
|
||||
implementedInApiVersion,
|
||||
nameOf(deleteCustomerAccountLinkById),
|
||||
"DELETE",
|
||||
"/banks/BANK_ID/customer_account_links/CUSTOMER_ACCOUNT_LINK_ID",
|
||||
"Delete Customer Account Link",
|
||||
s""" Delete Customer Account Link by CUSTOMER_ACCOUNT_LINK_ID
|
||||
|
|
||||
|${authenticationRequiredMessage(true)}
|
||||
|
|
||||
|""",
|
||||
EmptyBody,
|
||||
EmptyBody,
|
||||
List(
|
||||
$UserNotLoggedIn,
|
||||
$BankNotFound,
|
||||
UserHasMissingRoles,
|
||||
UnknownError
|
||||
),
|
||||
List(apiTagCustomer, apiTagNewStyle),
|
||||
Some(List(canDeleteCustomerAccountLink)))
|
||||
lazy val deleteCustomerAccountLinkById : OBPEndpoint = {
|
||||
case "banks" :: BankId(bankId) :: "customer_account_links" :: customerAccountLinkId :: Nil JsonDelete _ => {
|
||||
cc =>
|
||||
for {
|
||||
(_, callContext) <- NewStyle.function.getCustomerAccountLinkById(customerAccountLinkId, cc.callContext)
|
||||
(deleted, callContext) <- NewStyle.function.deleteCustomerAccountLinkById(customerAccountLinkId, callContext)
|
||||
} yield {
|
||||
(Full(deleted), HttpCode.`200`(callContext))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -28,7 +28,6 @@ package code.api.v5_0_0
|
||||
|
||||
import java.lang
|
||||
import java.util.Date
|
||||
|
||||
import code.api.util.APIUtil.{stringOptionOrNull, stringOrNull}
|
||||
import code.api.v1_2_1.BankRoutingJsonV121
|
||||
import code.api.v1_4_0.JSONFactory1_4_0.{CustomerFaceImageJson, MetaJsonV140}
|
||||
@ -40,6 +39,7 @@ import code.api.v3_0_0.{CustomerAttributeResponseJsonV300, JSONFactory300}
|
||||
import code.api.v3_1_0.{AccountAttributeResponseJson, AccountBasicV310, CustomerWithAttributesJsonV310, PhysicalCardWithAttributesJsonV310, PostConsentEntitlementJsonV310}
|
||||
import code.api.v4_0_0.BankAttributeBankResponseJsonV400
|
||||
import code.bankattribute.BankAttribute
|
||||
import code.customeraccountlinks.CustomerAccountLinkTrait
|
||||
import com.openbankproject.commons.model.{AccountAttribute, AccountRouting, AccountRoutingJsonV121, AmountOfMoneyJsonV121, Bank, BankAccount, CardAttribute, Customer, CustomerAttribute, PhysicalCardTrait, User, UserAuthContext, UserAuthContextUpdate, View, ViewBasic}
|
||||
import net.liftweb.json.JsonAST.JValue
|
||||
|
||||
@ -315,6 +315,28 @@ case class UpdatePhysicalCardJsonV500(
|
||||
brand: String
|
||||
)
|
||||
|
||||
case class CreateCustomerAccountLinkJson(
|
||||
customer_id: String,
|
||||
account_id: String,
|
||||
relationship_type: String
|
||||
)
|
||||
|
||||
case class UpdateCustomerAccountLinkJson(
|
||||
relationship_type: String
|
||||
)
|
||||
|
||||
case class CustomerAccountLinkJson(
|
||||
customer_account_link_id: String,
|
||||
customer_id: String,
|
||||
account_id: String,
|
||||
relationship_type: String
|
||||
)
|
||||
|
||||
case class CustomerAccountLinksJson(
|
||||
links:List[CustomerAccountLinkJson]
|
||||
)
|
||||
|
||||
|
||||
object JSONFactory500 {
|
||||
|
||||
def createUserAuthContextJson(userAuthContext: UserAuthContext): UserAuthContextJsonV500 = {
|
||||
@ -478,5 +500,19 @@ object JSONFactory500 {
|
||||
brand = stringOptionOrNull(card.brand)
|
||||
)
|
||||
}
|
||||
|
||||
def createCustomerAccountLinkJson(customerAccountLink: CustomerAccountLinkTrait): CustomerAccountLinkJson ={
|
||||
CustomerAccountLinkJson(
|
||||
customerAccountLink.customerAccountLinkId,
|
||||
customerAccountLink.customerId,
|
||||
customerAccountLink.accountId,
|
||||
customerAccountLink.relationshipType
|
||||
)
|
||||
}
|
||||
|
||||
def createCustomerAccountLinksJon(customerAccountLinks: List[CustomerAccountLinkTrait]): CustomerAccountLinksJson = {
|
||||
CustomerAccountLinksJson(customerAccountLinks.map(createCustomerAccountLinkJson))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,6 @@ package code.bankconnectors
|
||||
|
||||
import java.util.Date
|
||||
import java.util.UUID.randomUUID
|
||||
|
||||
import _root_.akka.http.scaladsl.model.HttpMethod
|
||||
import code.accountholders.{AccountHolders, MapperAccountHolders}
|
||||
import code.api.attributedefinition.AttributeDefinition
|
||||
@ -22,6 +21,7 @@ import code.bankconnectors.rest.RestConnector_vMar2019
|
||||
import code.bankconnectors.storedprocedure.StoredProcedureConnector_vDec2019
|
||||
import code.bankconnectors.vMay2019.KafkaMappedConnector_vMay2019
|
||||
import code.bankconnectors.vSept2018.KafkaMappedConnector_vSept2018
|
||||
import code.customeraccountlinks.CustomerAccountLinkTrait
|
||||
import code.endpointTag.EndpointTagT
|
||||
import code.fx.fx.TTL
|
||||
import code.management.ImporterAPI.ImporterTransaction
|
||||
@ -2574,5 +2574,19 @@ trait Connector extends MdcLoggable {
|
||||
message: String,
|
||||
callContext: Option[CallContext]
|
||||
): OBPReturnType[Box[String]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def getCustomerAccountLink(customerId: String, accountId: String, callContext: Option[CallContext]): OBPReturnType[Box[CustomerAccountLinkTrait]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String, callContext: Option[CallContext]): OBPReturnType[Box[List[CustomerAccountLinkTrait]]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def getCustomerAccountLinksByAccountId(accountId: String, callContext: Option[CallContext]): OBPReturnType[Box[List[CustomerAccountLinkTrait]]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def getCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]): OBPReturnType[Box[CustomerAccountLinkTrait]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def deleteCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]): OBPReturnType[Box[Boolean]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String, callContext: Option[CallContext]): OBPReturnType[Box[CustomerAccountLinkTrait]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
def updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String, callContext: Option[CallContext]): OBPReturnType[Box[CustomerAccountLinkTrait]] = Future{(Failure(setUnimplementedError), callContext)}
|
||||
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@ package code.bankconnectors
|
||||
|
||||
import java.util.Date
|
||||
import java.util.UUID.randomUUID
|
||||
|
||||
import _root_.akka.http.scaladsl.model.HttpMethod
|
||||
import code.DynamicData.DynamicDataProvider
|
||||
import code.DynamicEndpoint.{DynamicEndpointProvider, DynamicEndpointT}
|
||||
@ -31,6 +30,7 @@ import code.cardattribute.CardAttributeX
|
||||
import code.cards.MappedPhysicalCard
|
||||
import code.context.{UserAuthContextProvider, UserAuthContextUpdateProvider}
|
||||
import code.customer._
|
||||
import code.customeraccountlinks.CustomerAccountLinkTrait
|
||||
import code.customeraddress.CustomerAddressX
|
||||
import code.customerattribute.CustomerAttributeX
|
||||
import code.database.authorisation.Authorisations
|
||||
@ -5555,5 +5555,34 @@ object LocalMappedConnector extends Connector with MdcLoggable {
|
||||
} else
|
||||
Future{(Full("Success"), callContext)}
|
||||
}
|
||||
|
||||
|
||||
override def getCustomerAccountLink(customerId: String, accountId: String, callContext: Option[CallContext]): OBPReturnType[Box[CustomerAccountLinkTrait]] = Future{
|
||||
CustomerAccountLinkTrait.customerAccountLink.vend.getCustomerAccountLink(customerId, accountId) map { ( _, callContext) }
|
||||
}
|
||||
|
||||
override def getCustomerAccountLinksByCustomerId(customerId: String, callContext: Option[CallContext]) = Future{
|
||||
(CustomerAccountLinkTrait.customerAccountLink.vend.getCustomerAccountLinksByCustomerId(customerId),callContext)
|
||||
}
|
||||
|
||||
|
||||
override def getCustomerAccountLinksByAccountId(accountId: String, callContext: Option[CallContext]): OBPReturnType[Box[List[CustomerAccountLinkTrait]]] = Future{
|
||||
(CustomerAccountLinkTrait.customerAccountLink.vend.getCustomerAccountLinksByAccountId(accountId),callContext)
|
||||
}
|
||||
|
||||
override def getCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]) = Future{
|
||||
(CustomerAccountLinkTrait.customerAccountLink.vend.getCustomerAccountLinkById(customerAccountLinkId),callContext)
|
||||
}
|
||||
|
||||
|
||||
override def deleteCustomerAccountLinkById(customerAccountLinkId: String, callContext: Option[CallContext]) =
|
||||
CustomerAccountLinkTrait.customerAccountLink.vend.deleteCustomerAccountLinkById(customerAccountLinkId).map {(_, callContext)}
|
||||
|
||||
override def updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String, callContext: Option[CallContext]) = Future{
|
||||
(CustomerAccountLinkTrait.customerAccountLink.vend.updateCustomerAccountLinkById(customerAccountLinkId, relationshipType),callContext)
|
||||
}
|
||||
|
||||
override def createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String, callContext: Option[CallContext]): OBPReturnType[Box[CustomerAccountLinkTrait]] = Future{
|
||||
CustomerAccountLinkTrait.customerAccountLink.vend.createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String) map { ( _, callContext) }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -22,26 +22,30 @@ object CustomerAccountLinkTrait extends SimpleInjector {
|
||||
|
||||
trait CustomerAccountLinkProvider {
|
||||
def createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String): Box[CustomerAccountLinkTrait]
|
||||
def getOCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String): Box[CustomerAccountLinkTrait]
|
||||
def getOrCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String): Box[CustomerAccountLinkTrait]
|
||||
def getCustomerAccountLinkByCustomerId(customerId: String): Box[CustomerAccountLinkTrait]
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String): List[CustomerAccountLinkTrait]
|
||||
def getCustomerAccountLinksByAccountId(accountId: String): List[CustomerAccountLinkTrait]
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String): Box[List[CustomerAccountLinkTrait]]
|
||||
def getCustomerAccountLinksByAccountId(accountId: String): Box[List[CustomerAccountLinkTrait]]
|
||||
def getCustomerAccountLink(customerId: String, accountId: String): Box[CustomerAccountLinkTrait]
|
||||
def getCustomerAccountLinkById(customerAccountLinkId: String): Box[CustomerAccountLinkTrait]
|
||||
def updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String): Box[CustomerAccountLinkTrait]
|
||||
def getCustomerAccountLinks: Box[List[CustomerAccountLinkTrait]]
|
||||
def bulkDeleteCustomerAccountLinks(): Boolean
|
||||
def deleteCustomerAccountLink(customerAccountLinkId: String): Future[Box[Boolean]]
|
||||
def deleteCustomerAccountLinkById(customerAccountLinkId: String): Future[Box[Boolean]]
|
||||
}
|
||||
|
||||
class RemotedataCustomerAccountLinkProviderCaseClass {
|
||||
case class createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String)
|
||||
case class getOCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String)
|
||||
case class getOrCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String)
|
||||
case class getCustomerAccountLinkByCustomerId(customerId: String)
|
||||
case class getCustomerAccountLinksByCustomerId(customerId: String)
|
||||
case class getCustomerAccountLinksByAccountId(accountId: String)
|
||||
case class getCustomerAccountLinkById(customerAccountLinkId: String)
|
||||
case class updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String)
|
||||
case class getCustomerAccountLink(customerId: String, accountId: String)
|
||||
case class getCustomerAccountLinks()
|
||||
case class bulkDeleteCustomerAccountLinks()
|
||||
case class deleteCustomerAccountLink(customerAccountLinkId: String)
|
||||
case class deleteCustomerAccountLinkById(customerAccountLinkId: String)
|
||||
}
|
||||
|
||||
object RemotedataCustomerAccountLinkProviderCaseClass extends RemotedataCustomerAccountLinkProviderCaseClass
|
||||
|
||||
@ -7,19 +7,19 @@ import net.liftweb.mapper._
|
||||
|
||||
import scala.concurrent.Future
|
||||
import com.openbankproject.commons.ExecutionContext.Implicits.global
|
||||
import net.liftweb.util.Helpers.tryo
|
||||
|
||||
object MappedCustomerAccountLinkProvider extends CustomerAccountLinkProvider {
|
||||
def createCustomerAccountLink(customerId: String, accountId: String, relationshipType: String): Box[CustomerAccountLinkTrait] = {
|
||||
|
||||
val createCustomerAccountLink = CustomerAccountLink.create
|
||||
tryo {
|
||||
CustomerAccountLink.create
|
||||
.CustomerId(customerId)
|
||||
.AccountId(accountId)
|
||||
.RelationshipType(relationshipType)
|
||||
.saveMe()
|
||||
|
||||
Some(createCustomerAccountLink)
|
||||
}
|
||||
}
|
||||
def getOCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String): Box[CustomerAccountLinkTrait] = {
|
||||
def getOrCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String): Box[CustomerAccountLinkTrait] = {
|
||||
getCustomerAccountLink(accountId, customerId) match {
|
||||
case Empty =>
|
||||
val createCustomerAccountLink = CustomerAccountLink.create
|
||||
@ -36,32 +36,51 @@ object MappedCustomerAccountLinkProvider extends CustomerAccountLinkProvider {
|
||||
CustomerAccountLink.find(
|
||||
By(CustomerAccountLink.CustomerId, customerId))
|
||||
}
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String): List[CustomerAccountLinkTrait] = {
|
||||
CustomerAccountLink.findAll(
|
||||
By(CustomerAccountLink.CustomerId, customerId))
|
||||
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String): Box[List[CustomerAccountLinkTrait]] = {
|
||||
tryo {
|
||||
CustomerAccountLink.findAll(
|
||||
By(CustomerAccountLink.CustomerId, customerId))
|
||||
}
|
||||
}
|
||||
|
||||
def getCustomerAccountLinksByAccountId(accountId: String): List[CustomerAccountLinkTrait] = {
|
||||
val customerAccountLinks : List[CustomerAccountLinkTrait] = CustomerAccountLink.findAll(
|
||||
By(CustomerAccountLink.AccountId, accountId)).sortWith(_.id.get < _.id.get)
|
||||
customerAccountLinks
|
||||
def getCustomerAccountLinksByAccountId(accountId: String): Box[List[CustomerAccountLinkTrait]] = {
|
||||
tryo {
|
||||
CustomerAccountLink.findAll(
|
||||
By(CustomerAccountLink.AccountId, accountId)).sortWith(_.id.get < _.id.get)
|
||||
}
|
||||
}
|
||||
|
||||
def getCustomerAccountLink(accountId : String, customerId: String): Box[CustomerAccountLinkTrait] = {
|
||||
def getCustomerAccountLink(customerId: String, accountId : String): Box[CustomerAccountLinkTrait] = {
|
||||
CustomerAccountLink.find(
|
||||
By(CustomerAccountLink.AccountId, accountId),
|
||||
By(CustomerAccountLink.CustomerId, customerId))
|
||||
By(CustomerAccountLink.CustomerId, customerId),
|
||||
By(CustomerAccountLink.AccountId, accountId)
|
||||
)
|
||||
}
|
||||
|
||||
def getCustomerAccountLinkById(customerAccountLinkId: String): Box[CustomerAccountLinkTrait] = {
|
||||
CustomerAccountLink.find(
|
||||
By(CustomerAccountLink.CustomerAccountLinkId, customerAccountLinkId)
|
||||
)
|
||||
}
|
||||
|
||||
def updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String): Box[CustomerAccountLinkTrait] = {
|
||||
CustomerAccountLink.find(By(CustomerAccountLink.CustomerAccountLinkId, customerAccountLinkId)) match {
|
||||
case Full(t) => Full(t.RelationshipType(relationshipType).saveMe())
|
||||
case Empty => Empty ?~! ErrorMessages.CustomerAccountLinkNotFound
|
||||
case Failure(msg, exception, chain) => Failure(msg, exception, chain)
|
||||
}
|
||||
}
|
||||
|
||||
def getCustomerAccountLinks: Box[List[CustomerAccountLinkTrait]] = {
|
||||
Full(CustomerAccountLink.findAll())
|
||||
tryo {CustomerAccountLink.findAll()}
|
||||
}
|
||||
|
||||
def bulkDeleteCustomerAccountLinks(): Boolean = {
|
||||
CustomerAccountLink.bulkDelete_!!()
|
||||
}
|
||||
|
||||
def deleteCustomerAccountLink(customerAccountLinkId: String): Future[Box[Boolean]] = {
|
||||
def deleteCustomerAccountLinkById(customerAccountLinkId: String): Future[Box[Boolean]] = {
|
||||
Future {
|
||||
CustomerAccountLink.find(By(CustomerAccountLink.CustomerAccountLinkId, customerAccountLinkId)) match {
|
||||
case Full(t) => Full(t.delete_!)
|
||||
|
||||
@ -15,19 +15,27 @@ object RemotedataCustomerAccountLinks extends ObpActorInit with CustomerAccountL
|
||||
(actor ? cc.createCustomerAccountLink(accountId, customerId, relationshipType)).mapTo[Box[CustomerAccountLinkTrait]]
|
||||
)
|
||||
|
||||
def getOCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String) : Box[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.getOCreateCustomerAccountLink(accountId, customerId, relationshipType)).mapTo[Box[CustomerAccountLinkTrait]]
|
||||
def getOrCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType: String) : Box[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.getOrCreateCustomerAccountLink(accountId, customerId, relationshipType)).mapTo[Box[CustomerAccountLinkTrait]]
|
||||
)
|
||||
|
||||
def getCustomerAccountLinkByCustomerId(customerId: String): Box[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.getCustomerAccountLinkByCustomerId(customerId)).mapTo[Box[CustomerAccountLinkTrait]]
|
||||
)
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String): List[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.getCustomerAccountLinksByCustomerId(customerId)).mapTo[List[CustomerAccountLinkTrait]]
|
||||
def getCustomerAccountLinksByCustomerId(customerId: String): Box[List[CustomerAccountLinkTrait]] = getValueFromFuture(
|
||||
(actor ? cc.getCustomerAccountLinksByCustomerId(customerId)).mapTo[Box[List[CustomerAccountLinkTrait]]]
|
||||
)
|
||||
|
||||
def getCustomerAccountLinksByAccountId(accountId: String): List[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.getCustomerAccountLinksByAccountId(accountId)).mapTo[List[CustomerAccountLinkTrait]]
|
||||
def getCustomerAccountLinksByAccountId(accountId: String): Box[List[CustomerAccountLinkTrait]] = getValueFromFuture(
|
||||
(actor ? cc.getCustomerAccountLinksByAccountId(accountId)).mapTo[Box[List[CustomerAccountLinkTrait]]]
|
||||
)
|
||||
|
||||
def getCustomerAccountLinkById(customerAccountLinkId: String): Box[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.getCustomerAccountLinkById(customerAccountLinkId)).mapTo[Box[CustomerAccountLinkTrait]]
|
||||
)
|
||||
|
||||
def updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String): Box[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
(actor ? cc.updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String)).mapTo[Box[CustomerAccountLinkTrait]]
|
||||
)
|
||||
|
||||
def getCustomerAccountLink(customerId: String, accountId: String): Box[CustomerAccountLinkTrait] = getValueFromFuture(
|
||||
@ -41,8 +49,8 @@ object RemotedataCustomerAccountLinks extends ObpActorInit with CustomerAccountL
|
||||
def bulkDeleteCustomerAccountLinks(): Boolean = getValueFromFuture(
|
||||
(actor ? cc.bulkDeleteCustomerAccountLinks()).mapTo[Boolean]
|
||||
)
|
||||
def deleteCustomerAccountLink(customerAccountLinkId: String): Future[Box[Boolean]] =
|
||||
(actor ? cc.deleteCustomerAccountLink(customerAccountLinkId)).mapTo[Box[Boolean]]
|
||||
def deleteCustomerAccountLinkById(customerAccountLinkId: String): Future[Box[Boolean]] =
|
||||
(actor ? cc.deleteCustomerAccountLinkById(customerAccountLinkId)).mapTo[Box[Boolean]]
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -18,9 +18,9 @@ class RemotedataCustomerAccountLinksActor extends Actor with ObpActorHelper with
|
||||
logger.debug(s"createCustomerAccountLink($accountId, $relationshipType)")
|
||||
sender ! (mapper.createCustomerAccountLink(accountId, customerId, relationshipType))
|
||||
|
||||
case cc.getOCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType) =>
|
||||
logger.debug(s"getOCreateCustomerAccountLink($accountId, $relationshipType)")
|
||||
sender ! (mapper.getOCreateCustomerAccountLink(accountId, customerId, relationshipType))
|
||||
case cc.getOrCreateCustomerAccountLink(customerId: String, accountId: String, relationshipType) =>
|
||||
logger.debug(s"getOrCreateCustomerAccountLink($accountId, $relationshipType)")
|
||||
sender ! (mapper.getOrCreateCustomerAccountLink(accountId, customerId, relationshipType))
|
||||
|
||||
case cc.getCustomerAccountLinkByCustomerId(customerId: String) =>
|
||||
logger.debug(s"getCustomerAccountLinkByCustomerId($customerId)")
|
||||
@ -33,6 +33,14 @@ class RemotedataCustomerAccountLinksActor extends Actor with ObpActorHelper with
|
||||
case cc.getCustomerAccountLinksByAccountId(accountId: String) =>
|
||||
logger.debug(s"getCustomerAccountLinksByAccountId($accountId)")
|
||||
sender ! (mapper.getCustomerAccountLinksByAccountId(accountId))
|
||||
|
||||
case cc.getCustomerAccountLinkById(customerAccountLinkId: String)=>
|
||||
logger.debug(s"getCustomerAccountLinkById($customerAccountLinkId)")
|
||||
sender ! (mapper.getCustomerAccountLinkById(customerAccountLinkId))
|
||||
|
||||
case cc.updateCustomerAccountLinkById(customerAccountLinkId: String, relationshipType: String)=>
|
||||
logger.debug(s"updateCustomerAccountLinkById($customerAccountLinkId, $relationshipType)")
|
||||
sender ! (mapper.updateCustomerAccountLinkById(customerAccountLinkId, relationshipType))
|
||||
|
||||
case cc.getCustomerAccountLink(customerId: String, accountId: String) =>
|
||||
logger.debug(s"getCustomerAccountLink($accountId, $customerId)")
|
||||
@ -46,9 +54,9 @@ class RemotedataCustomerAccountLinksActor extends Actor with ObpActorHelper with
|
||||
logger.debug(s"bulkDeleteCustomerAccountLinks()")
|
||||
sender ! (mapper.bulkDeleteCustomerAccountLinks())
|
||||
|
||||
case cc.deleteCustomerAccountLink(customerAccountLinkId) =>
|
||||
case cc.deleteCustomerAccountLinkById(customerAccountLinkId) =>
|
||||
logger.debug(s"deleteCustomerAccountLink($customerAccountLinkId)")
|
||||
mapper.deleteCustomerAccountLink(customerAccountLinkId) pipeTo sender
|
||||
mapper.deleteCustomerAccountLinkById(customerAccountLinkId) pipeTo sender
|
||||
|
||||
case message => logger.warn("[AKKA ACTOR ERROR - REQUEST NOT RECOGNIZED] " + message)
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user