feat: Change customer to account_holder to be one-to-many (#11803)

This commit is contained in:
Stevche Radevski
2025-03-12 16:05:38 +01:00
committed by GitHub
parent 6053ec3976
commit e0109540fa
2 changed files with 20 additions and 7 deletions

View File

@@ -89,7 +89,7 @@ export const createPaymentSessionsWorkflow = createWorkflow(
return !!data.input.customer_id
}
).then(() => {
const customer: CustomerDTO & { account_holder: AccountHolderDTO } =
const customer: CustomerDTO & { account_holders: AccountHolderDTO[] } =
useRemoteQueryStep({
entry_point: "customer",
fields: [
@@ -100,7 +100,7 @@ export const createPaymentSessionsWorkflow = createWorkflow(
"last_name",
"phone",
"addresses.*",
"account_holder.*",
"account_holders.*",
"metadata",
],
variables: { id: input.customer_id },
@@ -116,11 +116,17 @@ export const createPaymentSessionsWorkflow = createWorkflow(
}
})
const existingAccountHolder = transform({ customer, input }, (data) => {
return data.customer.account_holders.find(
(ac) => ac.provider_id === data.input.provider_id
)
})
const accountHolderInput = {
provider_id: input.provider_id,
context: {
// The module is idempotent, so if there already is a linked account holder, the module will simply return it back.
account_holder: customer.account_holder,
account_holder: existingAccountHolder,
customer: paymentCustomer,
},
}
@@ -131,11 +137,14 @@ export const createPaymentSessionsWorkflow = createWorkflow(
when(
"account-holder-created",
{ paymentCustomer, accountHolder },
{ paymentCustomer, accountHolder, input },
(data) => {
return (
!isPresent(data.paymentCustomer?.account_holder) &&
isPresent(data.accountHolder)
!isPresent(
data.paymentCustomer?.account_holders.find(
(ac) => ac.provider_id === data.input.provider_id
)
) && isPresent(data.accountHolder)
)
}
).then(() => {

View File

@@ -42,13 +42,17 @@ export const CustomerAccountHolder: ModuleJoinerConfig = {
serviceName: Modules.CUSTOMER,
entity: "Customer",
fieldAlias: {
account_holder: "account_holder_link.account_holder",
account_holders: {
path: "account_holder_link.account_holder",
isList: true,
},
},
relationship: {
serviceName: LINKS.CustomerAccountHolder,
primaryKey: "customer_id",
foreignKey: "id",
alias: "account_holder_link",
isList: true,
},
},
{