chore: joiner config entity property (#9084)
This commit is contained in:
1 parent
28dc8d4d17
commit
fdd0543011
80 files changed
+464
-294
No files matched your search
@@ -16,7 +16,7 @@ export const createCustomerAddressesStep = createStep(
|
||||
ModuleRegistrationName.CUSTOMER
|
||||
)
|
||||
|
||||
const addresses = await service.createAddresses(data)
|
||||
const addresses = await service.createCustomerAddresses(data)
|
||||
|
||||
return new StepResponse(
|
||||
addresses,
|
||||
@@ -32,6 +32,6 @@ export const createCustomerAddressesStep = createStep(
|
||||
ModuleRegistrationName.CUSTOMER
|
||||
)
|
||||
|
||||
await service.deleteAddresses(ids)
|
||||
await service.deleteCustomerAddresses(ids)
|
||||
}
|
||||
)
|
||||
@@ -13,10 +13,10 @@ export const deleteCustomerAddressesStep = createStep(
|
||||
ModuleRegistrationName.CUSTOMER
|
||||
)
|
||||
|
||||
const existing = await service.listAddresses({
|
||||
const existing = await service.listCustomerAddresses({
|
||||
id: ids,
|
||||
})
|
||||
await service.deleteAddresses(ids)
|
||||
await service.deleteCustomerAddresses(ids)
|
||||
|
||||
return new StepResponse(void 0, existing)
|
||||
},
|
||||
@@ -29,6 +29,6 @@ export const deleteCustomerAddressesStep = createStep(
|
||||
ModuleRegistrationName.CUSTOMER
|
||||
)
|
||||
|
||||
await service.createAddresses(prevAddresses)
|
||||
await service.createCustomerAddresses(prevAddresses)
|
||||
}
|
||||
)
|
||||
+1
-1
@@ -55,7 +55,7 @@ export const maybeUnsetDefaultBillingAddressesStep = createStep(
|
||||
ModuleRegistrationName.CUSTOMER
|
||||
)
|
||||
|
||||
await customerModuleService.updateAddresses(
|
||||
await customerModuleService.updateCustomerAddresses(
|
||||
{ id: addressesToSet },
|
||||
{ is_default_billing: true }
|
||||
)
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ export const maybeUnsetDefaultShippingAddressesStep = createStep(
|
||||
ModuleRegistrationName.CUSTOMER
|
||||
)
|
||||
|
||||
await customerModuleService.updateAddresses(
|
||||
await customerModuleService.updateCustomerAddresses(
|
||||
{ id: addressesToSet },
|
||||
{ is_default_shipping: true }
|
||||
)
|
||||
|
||||
@@ -29,12 +29,12 @@ export const updateCustomerAddressesStep = createStep(
|
||||
const { selects, relations } = getSelectsAndRelationsFromObjectArray([
|
||||
data.update,
|
||||
])
|
||||
const prevCustomers = await service.listAddresses(data.selector, {
|
||||
const prevCustomers = await service.listCustomerAddresses(data.selector, {
|
||||
select: selects,
|
||||
relations,
|
||||
})
|
||||
|
||||
const customerAddresses = await service.updateAddresses(
|
||||
const customerAddresses = await service.updateCustomerAddresses(
|
||||
data.selector,
|
||||
data.update
|
||||
)
|
||||
@@ -51,7 +51,9 @@ export const updateCustomerAddressesStep = createStep(
|
||||
)
|
||||
|
||||
await promiseAll(
|
||||
prevCustomerAddresses.map((c) => service.updateAddresses(c.id, { ...c }))
|
||||
prevCustomerAddresses.map((c) =>
|
||||
service.updateCustomerAddresses(c.id, { ...c })
|
||||
)
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -16,12 +16,12 @@ export const unsetForCreate = async (
|
||||
return acc
|
||||
}, [])
|
||||
|
||||
const customerDefaultAddresses = await customerService.listAddresses({
|
||||
const customerDefaultAddresses = await customerService.listCustomerAddresses({
|
||||
customer_id: customerIds,
|
||||
[field]: true,
|
||||
})
|
||||
|
||||
await customerService.updateAddresses(
|
||||
await customerService.updateCustomerAddresses(
|
||||
{ customer_id: customerIds, [field]: true },
|
||||
{ [field]: false }
|
||||
)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import {
|
||||
UpdateCustomerAddressDTO,
|
||||
FilterableCustomerAddressProps,
|
||||
ICustomerModuleService,
|
||||
UpdateCustomerAddressDTO,
|
||||
} from "@medusajs/types"
|
||||
import { StepResponse } from "@medusajs/workflows-sdk"
|
||||
|
||||
@@ -17,18 +17,21 @@ export const unsetForUpdate = async (
|
||||
return new StepResponse(void 0)
|
||||
}
|
||||
|
||||
const affectedCustomers = await customerService.listAddresses(data.selector, {
|
||||
select: ["id", "customer_id"],
|
||||
})
|
||||
const affectedCustomers = await customerService.listCustomerAddresses(
|
||||
data.selector,
|
||||
{
|
||||
select: ["id", "customer_id"],
|
||||
}
|
||||
)
|
||||
|
||||
const customerIds = affectedCustomers.map((address) => address.customer_id)
|
||||
|
||||
const customerDefaultAddresses = await customerService.listAddresses({
|
||||
const customerDefaultAddresses = await customerService.listCustomerAddresses({
|
||||
customer_id: customerIds,
|
||||
[field]: true,
|
||||
})
|
||||
|
||||
await customerService.updateAddresses(
|
||||
await customerService.updateCustomerAddresses(
|
||||
{ customer_id: customerIds, [field]: true },
|
||||
{ [field]: false }
|
||||
)
|
||||
|
||||
+1
-3
@@ -7,9 +7,7 @@ export class ModuleService implements IModuleService {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom_name"],
|
||||
args: {
|
||||
entity: "Custom",
|
||||
},
|
||||
entity: "Custom",
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
@@ -75,15 +75,15 @@ describe("load internal - load resources", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["dml_entity", "dml_entities"],
|
||||
entity: "DmlEntity",
|
||||
args: {
|
||||
entity: "DmlEntity",
|
||||
methodSuffix: "DmlEntities",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["entity_model", "entity_models"],
|
||||
entity: "EntityModel",
|
||||
args: {
|
||||
entity: "EntityModel",
|
||||
methodSuffix: "EntityModels",
|
||||
},
|
||||
},
|
||||
@@ -156,15 +156,15 @@ describe("load internal - load resources", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["entity_model", "entity_models"],
|
||||
entity: "EntityModel",
|
||||
args: {
|
||||
entity: "EntityModel",
|
||||
methodSuffix: "EntityModels",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["dml_entity", "dml_entities"],
|
||||
entity: "DmlEntity",
|
||||
args: {
|
||||
entity: "DmlEntity",
|
||||
methodSuffix: "DmlEntities",
|
||||
},
|
||||
},
|
||||
@@ -237,15 +237,15 @@ describe("load internal - load resources", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["entity2", "entity2s"],
|
||||
entity: "Entity2",
|
||||
args: {
|
||||
entity: "Entity2",
|
||||
methodSuffix: "Entity2s",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["entity_model", "entity_models"],
|
||||
entity: "EntityModel",
|
||||
args: {
|
||||
entity: "EntityModel",
|
||||
methodSuffix: "EntityModels",
|
||||
},
|
||||
},
|
||||
@@ -310,8 +310,8 @@ describe("load internal - load resources", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom_name"],
|
||||
entity: "Custom",
|
||||
args: {
|
||||
entity: "Custom",
|
||||
methodSuffix: "Customs",
|
||||
},
|
||||
},
|
||||
|
||||
@@ -206,6 +206,7 @@ export class RemoteJoiner {
|
||||
for (const name of alias.name) {
|
||||
service_.alias.push({
|
||||
name,
|
||||
entity: alias.entity,
|
||||
args: alias.args,
|
||||
})
|
||||
}
|
||||
@@ -234,16 +235,13 @@ export class RemoteJoiner {
|
||||
|
||||
service_.relationships?.set(alias.name as string, {
|
||||
alias: alias.name as string,
|
||||
entity: alias.entity,
|
||||
foreignKey: alias.name + "_id",
|
||||
primaryKey: "id",
|
||||
serviceName: service_.serviceName!,
|
||||
args,
|
||||
})
|
||||
this.cacheServiceConfig(
|
||||
serviceConfigs,
|
||||
undefined,
|
||||
alias.name as string
|
||||
)
|
||||
this.cacheServiceConfig(serviceConfigs, undefined, alias)
|
||||
}
|
||||
|
||||
this.cacheServiceConfig(serviceConfigs, service_.serviceName)
|
||||
@@ -313,21 +311,23 @@ export class RemoteJoiner {
|
||||
private cacheServiceConfig(
|
||||
serviceConfigs,
|
||||
serviceName?: string,
|
||||
serviceAlias?: string
|
||||
serviceAlias?: JoinerServiceConfigAlias
|
||||
): void {
|
||||
if (serviceAlias) {
|
||||
const name = `alias_${serviceAlias}`
|
||||
const name = `alias_${serviceAlias.name}`
|
||||
if (!this.serviceConfigCache.has(name)) {
|
||||
let aliasConfig: JoinerServiceConfigAlias | undefined
|
||||
const config = serviceConfigs.find((conf) => {
|
||||
const aliases = conf.alias as JoinerServiceConfigAlias[]
|
||||
const hasArgs = aliases?.find((alias) => alias.name === serviceAlias)
|
||||
const hasArgs = aliases?.find(
|
||||
(alias) => alias.name === serviceAlias.name
|
||||
)
|
||||
aliasConfig = hasArgs
|
||||
return hasArgs
|
||||
})
|
||||
|
||||
if (config) {
|
||||
const serviceConfig = { ...config }
|
||||
const serviceConfig = { ...config, entity: serviceAlias.entity }
|
||||
if (aliasConfig) {
|
||||
serviceConfig.args = { ...config?.args, ...aliasConfig?.args }
|
||||
}
|
||||
@@ -450,7 +450,7 @@ export class RemoteJoiner {
|
||||
|
||||
if (notFound.size > 0) {
|
||||
const entityName =
|
||||
expand.serviceConfig.args?.entity ??
|
||||
expand.serviceConfig.entity ??
|
||||
expand.serviceConfig.args?.methodSuffix ??
|
||||
expand.serviceConfig.serviceName
|
||||
|
||||
|
||||
@@ -491,7 +491,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<CustomerAddressDTO[]>} The list of created addresses.
|
||||
*
|
||||
* @example
|
||||
* const addresses = await customerModuleService.createAddresses([
|
||||
* const addresses = await customerModuleService.createCustomerAddresses([
|
||||
* {
|
||||
* customer_id: "cus_123",
|
||||
* address_name: "Home",
|
||||
@@ -501,7 +501,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* },
|
||||
* ])
|
||||
*/
|
||||
createAddresses(
|
||||
createCustomerAddresses(
|
||||
addresses: CreateCustomerAddressDTO[],
|
||||
sharedContext?: Context
|
||||
): Promise<CustomerAddressDTO[]>
|
||||
@@ -514,7 +514,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<CustomerAddressDTO>} The created address.
|
||||
*
|
||||
* @example
|
||||
* const address = await customerModuleService.createAddresses({
|
||||
* const address = await customerModuleService.createCustomerAddresses({
|
||||
* customer_id: "cus_123",
|
||||
* address_name: "Home",
|
||||
* address_1: "432 Stierlin Rd",
|
||||
@@ -522,7 +522,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* country_code: "us",
|
||||
* })
|
||||
*/
|
||||
createAddresses(
|
||||
createCustomerAddresses(
|
||||
address: CreateCustomerAddressDTO,
|
||||
sharedContext?: Context
|
||||
): Promise<CustomerAddressDTO>
|
||||
@@ -536,7 +536,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<CustomerAddressDTO>} The updated address.
|
||||
*
|
||||
* @example
|
||||
* const address = await customerModuleService.updateAddresses(
|
||||
* const address = await customerModuleService.updateCustomerAddresses(
|
||||
* "cuaddr_123",
|
||||
* {
|
||||
* first_name: "John",
|
||||
@@ -544,7 +544,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
updateAddresses(
|
||||
updateCustomerAddresses(
|
||||
addressId: string,
|
||||
data: UpdateCustomerAddressDTO,
|
||||
sharedContext?: Context
|
||||
@@ -559,7 +559,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<CustomerAddressDTO[]>} The updated addresses.
|
||||
*
|
||||
* @example
|
||||
* const addresses = await customerModuleService.updateAddresses(
|
||||
* const addresses = await customerModuleService.updateCustomerAddresses(
|
||||
* ["cuaddr_123", "cuaddr_321"],
|
||||
* {
|
||||
* first_name: "John",
|
||||
@@ -567,7 +567,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
updateAddresses(
|
||||
updateCustomerAddresses(
|
||||
addressIds: string[],
|
||||
data: UpdateCustomerAddressDTO,
|
||||
sharedContext?: Context
|
||||
@@ -582,14 +582,14 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<CustomerAddressDTO[]>} The updated addresses.
|
||||
*
|
||||
* @example
|
||||
* const addresses = await customerModuleService.updateAddresses(
|
||||
* const addresses = await customerModuleService.updateCustomerAddresses(
|
||||
* { first_name: "John" },
|
||||
* {
|
||||
* last_name: "Smith",
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
updateAddresses(
|
||||
updateCustomerAddresses(
|
||||
selector: FilterableCustomerAddressProps,
|
||||
data: UpdateCustomerAddressDTO,
|
||||
sharedContext?: Context
|
||||
@@ -603,9 +603,12 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<void>} Resolves when the address is deleted successfully.
|
||||
*
|
||||
* @example
|
||||
* await customerModuleService.deleteAddresses("cuaddr_123")
|
||||
* await customerModuleService.deleteCustomerAddresses("cuaddr_123")
|
||||
*/
|
||||
deleteAddresses(addressId: string, sharedContext?: Context): Promise<void>
|
||||
deleteCustomerAddresses(
|
||||
addressId: string,
|
||||
sharedContext?: Context
|
||||
): Promise<void>
|
||||
|
||||
/**
|
||||
* This method deletes addresses by their IDs.
|
||||
@@ -615,12 +618,15 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<void>} Resolves when the addresses are deleted successfully.
|
||||
*
|
||||
* @example
|
||||
* await customerModuleService.deleteAddresses([
|
||||
* await customerModuleService.deleteCustomerAddresses([
|
||||
* "cuaddr_123",
|
||||
* "cuaddr_321",
|
||||
* ])
|
||||
*/
|
||||
deleteAddresses(addressIds: string[], sharedContext?: Context): Promise<void>
|
||||
deleteCustomerAddresses(
|
||||
addressIds: string[],
|
||||
sharedContext?: Context
|
||||
): Promise<void>
|
||||
|
||||
/**
|
||||
* This method deletes addresses matching the specified filters.
|
||||
@@ -630,12 +636,12 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* @returns {Promise<void>} Resolves when the addresses are deleted successfully.
|
||||
*
|
||||
* @example
|
||||
* await customerModuleService.deleteAddresses({
|
||||
* await customerModuleService.deleteCustomerAddresses({
|
||||
* first_name: "John",
|
||||
* last_name: "Smith",
|
||||
* })
|
||||
*/
|
||||
deleteAddresses(
|
||||
deleteCustomerAddresses(
|
||||
selector: FilterableCustomerAddressProps,
|
||||
sharedContext?: Context
|
||||
): Promise<void>
|
||||
@@ -653,7 +659,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* To retrieve a list of addresses using their IDs:
|
||||
*
|
||||
* ```ts
|
||||
* const addresses = await customerModuleService.listAddresses({
|
||||
* const addresses = await customerModuleService.listCustomerAddresses({
|
||||
* id: ["cuaddr_123", "cuaddr_321"],
|
||||
* })
|
||||
* ```
|
||||
@@ -661,7 +667,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* To specify relations that should be retrieved within the addresses:
|
||||
*
|
||||
* ```ts
|
||||
* const addresses = await customerModuleService.listAddresses(
|
||||
* const addresses = await customerModuleService.listCustomerAddresses(
|
||||
* {
|
||||
* id: ["cuaddr_123", "cuaddr_321"],
|
||||
* },
|
||||
@@ -674,7 +680,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* By default, only the first `15` records are retrieved. You can control pagination by specifying the `skip` and `take` properties of the `config` parameter:
|
||||
*
|
||||
* ```ts
|
||||
* const addresses = await customerModuleService.listAddresses(
|
||||
* const addresses = await customerModuleService.listCustomerAddresses(
|
||||
* {
|
||||
* id: ["cuaddr_123", "cuaddr_321"],
|
||||
* },
|
||||
@@ -686,7 +692,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* )
|
||||
* ```
|
||||
*/
|
||||
listAddresses(
|
||||
listCustomerAddresses(
|
||||
filters?: FilterableCustomerAddressProps,
|
||||
config?: FindConfig<CustomerAddressDTO>,
|
||||
sharedContext?: Context
|
||||
@@ -706,7 +712,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
*
|
||||
* ```ts
|
||||
* const [addresses, count] =
|
||||
* await customerModuleService.listAndCountAddresses({
|
||||
* await customerModuleService.listAndCountCustomerAddresses({
|
||||
* id: ["cuaddr_123", "cuaddr_321"],
|
||||
* })
|
||||
* ```
|
||||
@@ -715,7 +721,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
*
|
||||
* ```ts
|
||||
* const [addresses, count] =
|
||||
* await customerModuleService.listAndCountAddresses(
|
||||
* await customerModuleService.listAndCountCustomerAddresses(
|
||||
* {
|
||||
* id: ["cuaddr_123", "cuaddr_321"],
|
||||
* },
|
||||
@@ -729,7 +735,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
*
|
||||
* ```ts
|
||||
* const [addresses, count] =
|
||||
* await customerModuleService.listAndCountAddresses(
|
||||
* await customerModuleService.listAndCountCustomerAddresses(
|
||||
* {
|
||||
* id: ["cuaddr_123", "cuaddr_321"],
|
||||
* },
|
||||
@@ -741,7 +747,7 @@ export interface ICustomerModuleService extends IModuleService {
|
||||
* )
|
||||
* ```
|
||||
*/
|
||||
listAndCountAddresses(
|
||||
listAndCountCustomerAddresses(
|
||||
filters?: FilterableCustomerAddressProps,
|
||||
config?: FindConfig<CustomerAddressDTO>,
|
||||
sharedContext?: Context
|
||||
|
||||
@@ -3,6 +3,7 @@ export type JoinerRelationship = {
|
||||
foreignKey: string
|
||||
primaryKey: string
|
||||
serviceName: string
|
||||
entity?: string
|
||||
/**
|
||||
* In an inverted relationship the foreign key is on the other service and the primary key is on the current service
|
||||
*/
|
||||
@@ -19,6 +20,7 @@ export type JoinerRelationship = {
|
||||
|
||||
export interface JoinerServiceConfigAlias {
|
||||
name: string | string[]
|
||||
entity?: string
|
||||
/**
|
||||
* Extra arguments to pass to the remoteFetchData callback
|
||||
*/
|
||||
@@ -96,6 +98,7 @@ export type InternalJoinerServiceConfig = Omit<
|
||||
"relationships"
|
||||
> & {
|
||||
relationships?: Map<string, JoinerRelationship>
|
||||
entity?: string
|
||||
}
|
||||
|
||||
export interface RemoteExpandProperty {
|
||||
|
||||
@@ -61,57 +61,57 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["fulfillment_set", "fulfillment_sets"],
|
||||
entity: FulfillmentSet.name,
|
||||
args: {
|
||||
entity: FulfillmentSet.name,
|
||||
methodSuffix: "FulfillmentSets",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_option", "shipping_options"],
|
||||
entity: ShippingOption.name,
|
||||
args: {
|
||||
entity: ShippingOption.name,
|
||||
methodSuffix: "ShippingOptions",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_profile", "shipping_profiles"],
|
||||
entity: ShippingProfile.name,
|
||||
args: {
|
||||
entity: ShippingProfile.name,
|
||||
methodSuffix: "ShippingProfiles",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment", "fulfillments"],
|
||||
entity: Fulfillment.name,
|
||||
args: {
|
||||
entity: Fulfillment.name,
|
||||
methodSuffix: "Fulfillments",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment_provider", "fulfillment_providers"],
|
||||
entity: FulfillmentProvider.name,
|
||||
args: {
|
||||
entity: FulfillmentProvider.name,
|
||||
methodSuffix: "FulfillmentProviders",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["service_zone", "service_zones"],
|
||||
entity: ServiceZone.name,
|
||||
args: {
|
||||
entity: ServiceZone.name,
|
||||
methodSuffix: "ServiceZones",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["geo_zone", "geo_zones"],
|
||||
entity: GeoZone.name,
|
||||
args: {
|
||||
entity: GeoZone.name,
|
||||
methodSuffix: "GeoZones",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_option_rule", "shipping_option_rules"],
|
||||
entity: ShippingOptionRule.name,
|
||||
args: {
|
||||
entity: ShippingOptionRule.name,
|
||||
methodSuffix: "ShippingOptionRules",
|
||||
},
|
||||
},
|
||||
@@ -124,8 +124,8 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom", "customs"],
|
||||
entity: "Custom",
|
||||
args: {
|
||||
entity: "Custom",
|
||||
methodSuffix: "Customs",
|
||||
},
|
||||
},
|
||||
@@ -140,8 +140,8 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom", "customs"],
|
||||
entity: "Custom",
|
||||
args: {
|
||||
entity: "Custom",
|
||||
methodSuffix: "Customs",
|
||||
},
|
||||
},
|
||||
@@ -164,8 +164,8 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom", "customs"],
|
||||
entity: "Custom",
|
||||
args: {
|
||||
entity: "Custom",
|
||||
methodSuffix: "Customs",
|
||||
},
|
||||
},
|
||||
@@ -189,64 +189,64 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom", "customs"],
|
||||
entity: "Custom",
|
||||
args: {
|
||||
entity: "Custom",
|
||||
methodSuffix: "Customs",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment_set", "fulfillment_sets"],
|
||||
entity: FulfillmentSet.name,
|
||||
args: {
|
||||
entity: FulfillmentSet.name,
|
||||
methodSuffix: "FulfillmentSets",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_option", "shipping_options"],
|
||||
entity: ShippingOption.name,
|
||||
args: {
|
||||
entity: ShippingOption.name,
|
||||
methodSuffix: "ShippingOptions",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_profile", "shipping_profiles"],
|
||||
entity: ShippingProfile.name,
|
||||
args: {
|
||||
entity: ShippingProfile.name,
|
||||
methodSuffix: "ShippingProfiles",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment", "fulfillments"],
|
||||
entity: Fulfillment.name,
|
||||
args: {
|
||||
entity: Fulfillment.name,
|
||||
methodSuffix: "Fulfillments",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment_provider", "fulfillment_providers"],
|
||||
entity: FulfillmentProvider.name,
|
||||
args: {
|
||||
entity: FulfillmentProvider.name,
|
||||
methodSuffix: "FulfillmentProviders",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["service_zone", "service_zones"],
|
||||
entity: ServiceZone.name,
|
||||
args: {
|
||||
entity: ServiceZone.name,
|
||||
methodSuffix: "ServiceZones",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["geo_zone", "geo_zones"],
|
||||
entity: GeoZone.name,
|
||||
args: {
|
||||
entity: GeoZone.name,
|
||||
methodSuffix: "GeoZones",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_option_rule", "shipping_option_rules"],
|
||||
entity: ShippingOptionRule.name,
|
||||
args: {
|
||||
entity: ShippingOptionRule.name,
|
||||
methodSuffix: "ShippingOptionRules",
|
||||
},
|
||||
},
|
||||
@@ -259,9 +259,8 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom", "customs"],
|
||||
args: {
|
||||
entity: "Custom",
|
||||
},
|
||||
entity: "Custom",
|
||||
args: {},
|
||||
},
|
||||
],
|
||||
})
|
||||
@@ -274,8 +273,8 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["custom", "customs"],
|
||||
entity: "Custom",
|
||||
args: {
|
||||
entity: "Custom",
|
||||
methodSuffix: "Customs",
|
||||
},
|
||||
},
|
||||
@@ -283,14 +282,14 @@ describe("joiner-config-builder", () => {
|
||||
})
|
||||
})
|
||||
|
||||
it("should return a full joiner configuration with custom aliases overriding defaults", () => {
|
||||
it.only("should return a full joiner configuration with custom aliases overriding defaults", () => {
|
||||
const joinerConfig = defineJoinerConfig(Modules.FULFILLMENT, {
|
||||
models: [FulfillmentSet],
|
||||
alias: [
|
||||
{
|
||||
name: ["fulfillment_set", "fulfillment_sets"],
|
||||
entity: "FulfillmentSet",
|
||||
args: {
|
||||
entity: "FulfillmentSet",
|
||||
methodSuffix: "fulfillmentSetCustom",
|
||||
},
|
||||
},
|
||||
@@ -307,8 +306,8 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["fulfillment_set", "fulfillment_sets"],
|
||||
entity: "FulfillmentSet",
|
||||
args: {
|
||||
entity: "FulfillmentSet",
|
||||
methodSuffix: "fulfillmentSetCustom",
|
||||
},
|
||||
},
|
||||
@@ -349,57 +348,57 @@ describe("joiner-config-builder", () => {
|
||||
alias: [
|
||||
{
|
||||
name: ["fulfillment_set", "fulfillment_sets"],
|
||||
entity: FulfillmentSet.name,
|
||||
args: {
|
||||
entity: FulfillmentSet.name,
|
||||
methodSuffix: "FulfillmentSets",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_option", "shipping_options"],
|
||||
entity: ShippingOption.name,
|
||||
args: {
|
||||
entity: ShippingOption.name,
|
||||
methodSuffix: "ShippingOptions",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_profile", "shipping_profiles"],
|
||||
entity: ShippingProfile.name,
|
||||
args: {
|
||||
entity: ShippingProfile.name,
|
||||
methodSuffix: "ShippingProfiles",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment", "fulfillments"],
|
||||
entity: Fulfillment.name,
|
||||
args: {
|
||||
entity: Fulfillment.name,
|
||||
methodSuffix: "Fulfillments",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["fulfillment_provider", "fulfillment_providers"],
|
||||
entity: FulfillmentProvider.name,
|
||||
args: {
|
||||
entity: FulfillmentProvider.name,
|
||||
methodSuffix: "FulfillmentProviders",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["service_zone", "service_zones"],
|
||||
entity: ServiceZone.name,
|
||||
args: {
|
||||
entity: ServiceZone.name,
|
||||
methodSuffix: "ServiceZones",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["geo_zone", "geo_zones"],
|
||||
entity: GeoZone.name,
|
||||
args: {
|
||||
entity: GeoZone.name,
|
||||
methodSuffix: "GeoZones",
|
||||
},
|
||||
},
|
||||
{
|
||||
name: ["shipping_option_rule", "shipping_option_rules"],
|
||||
entity: ShippingOptionRule.name,
|
||||
args: {
|
||||
entity: ShippingOptionRule.name,
|
||||
methodSuffix: "ShippingOptionRules",
|
||||
},
|
||||
},
|
||||
@@ -518,6 +517,7 @@ describe("joiner-config-builder", () => {
|
||||
car: {
|
||||
id: {
|
||||
field: "car",
|
||||
entity: "Car",
|
||||
linkable: "car_id",
|
||||
primaryKey: "id",
|
||||
serviceName: "myService",
|
||||
@@ -527,6 +527,7 @@ describe("joiner-config-builder", () => {
|
||||
user: {
|
||||
id: {
|
||||
field: "user",
|
||||
entity: "User",
|
||||
linkable: "user_id",
|
||||
primaryKey: "id",
|
||||
serviceName: "myService",
|
||||
@@ -537,12 +538,14 @@ describe("joiner-config-builder", () => {
|
||||
|
||||
expect(linkConfig.car.toJSON()).toEqual({
|
||||
field: "car",
|
||||
entity: "Car",
|
||||
linkable: "car_id",
|
||||
primaryKey: "id",
|
||||
serviceName: "myService",
|
||||
})
|
||||
expect(linkConfig.user.toJSON()).toEqual({
|
||||
field: "user",
|
||||
entity: "User",
|
||||
linkable: "user_id",
|
||||
primaryKey: "id",
|
||||
serviceName: "myService",
|
||||
@@ -559,6 +562,7 @@ describe("joiner-config-builder", () => {
|
||||
user: {
|
||||
id: {
|
||||
field: "user",
|
||||
entity: "User",
|
||||
linkable: "user_id",
|
||||
primaryKey: "id",
|
||||
serviceName: "myService",
|
||||
@@ -568,6 +572,7 @@ describe("joiner-config-builder", () => {
|
||||
currency: {
|
||||
code: {
|
||||
field: "currency",
|
||||
entity: "Currency",
|
||||
linkable: "currency_code",
|
||||
primaryKey: "code",
|
||||
serviceName: "myService",
|
||||
@@ -578,12 +583,14 @@ describe("joiner-config-builder", () => {
|
||||
|
||||
expect(linkConfig.user.toJSON()).toEqual({
|
||||
field: "user",
|
||||
entity: "User",
|
||||
linkable: "user_id",
|
||||
primaryKey: "id",
|
||||
serviceName: "myService",
|
||||
})
|
||||
expect(linkConfig.currency.toJSON()).toEqual({
|
||||
field: "currency",
|
||||
entity: "Currency",
|
||||
linkable: "currency_code",
|
||||
primaryKey: "code",
|
||||
serviceName: "myService",
|
||||
@@ -645,12 +652,14 @@ describe("joiner-config-builder", () => {
|
||||
expect(linkConfig.user.id).toEqual({
|
||||
serviceName: "myService",
|
||||
field: "user",
|
||||
entity: "User",
|
||||
linkable: "user_id",
|
||||
primaryKey: "id",
|
||||
})
|
||||
expect(linkConfig.car.number_plate).toEqual({
|
||||
serviceName: "myService",
|
||||
field: "car",
|
||||
entity: "Car",
|
||||
linkable: "car_number_plate",
|
||||
primaryKey: "number_plate",
|
||||
})
|
||||
@@ -658,12 +667,14 @@ describe("joiner-config-builder", () => {
|
||||
expect(linkConfig.car.toJSON()).toEqual({
|
||||
serviceName: "myService",
|
||||
field: "car",
|
||||
entity: "Car",
|
||||
linkable: "car_number_plate",
|
||||
primaryKey: "number_plate",
|
||||
})
|
||||
expect(linkConfig.user.toJSON()).toEqual({
|
||||
serviceName: "myService",
|
||||
field: "user",
|
||||
entity: "User",
|
||||
linkable: "user_id",
|
||||
primaryKey: "id",
|
||||
})
|
||||
|
||||
@@ -13,6 +13,8 @@ export interface DefineLinkExport {
|
||||
type InputSource = {
|
||||
serviceName: string
|
||||
field: string
|
||||
entity?: string
|
||||
alias?: string
|
||||
linkable: string
|
||||
primaryKey: string
|
||||
}
|
||||
@@ -44,7 +46,9 @@ type DefineLinkInputSource = InputSource | InputOptions | CombinedSource
|
||||
|
||||
type ModuleLinkableKeyConfig = {
|
||||
module: string
|
||||
entity?: string
|
||||
key: string
|
||||
field: string
|
||||
isList?: boolean
|
||||
deleteCascade?: boolean
|
||||
primaryKey: string
|
||||
@@ -74,11 +78,13 @@ function prepareServiceConfig(input: DefineLinkInputSource) {
|
||||
|
||||
serviceConfig = {
|
||||
key: source.linkable,
|
||||
alias: camelToSnakeCase(source.field),
|
||||
alias: source.alias ?? camelToSnakeCase(source.field),
|
||||
field: source.field,
|
||||
primaryKey: source.primaryKey,
|
||||
isList: false,
|
||||
deleteCascade: false,
|
||||
module: source.serviceName,
|
||||
entity: source.entity,
|
||||
}
|
||||
} else if (isInputOptions(input)) {
|
||||
const source = isToJSON(input.linkable)
|
||||
@@ -87,11 +93,13 @@ function prepareServiceConfig(input: DefineLinkInputSource) {
|
||||
|
||||
serviceConfig = {
|
||||
key: source.linkable,
|
||||
alias: camelToSnakeCase(source.field),
|
||||
alias: source.alias ?? camelToSnakeCase(source.field),
|
||||
field: source.field,
|
||||
primaryKey: source.primaryKey,
|
||||
isList: input.isList ?? false,
|
||||
deleteCascade: input.deleteCascade ?? false,
|
||||
module: source.serviceName,
|
||||
entity: source.entity,
|
||||
}
|
||||
} else {
|
||||
throw new Error(
|
||||
@@ -176,7 +184,7 @@ ${serviceBObj.module}: {
|
||||
let aliasAOptions =
|
||||
serviceAObj.alias ??
|
||||
serviceAAliases.find((a) => {
|
||||
return a.args?.entity == serviceAKeyEntity
|
||||
return a.entity == serviceAKeyEntity
|
||||
})?.name
|
||||
|
||||
let aliasA = aliasAOptions
|
||||
@@ -190,10 +198,11 @@ ${serviceBObj.module}: {
|
||||
)
|
||||
}
|
||||
|
||||
const serviceAObjEntryPoint = camelToSnakeCase(serviceAObj.field)
|
||||
const serviceAMethodSuffix = serviceAAliases.find((serviceAlias) => {
|
||||
return Array.isArray(serviceAlias.name)
|
||||
? serviceAlias.name.includes(aliasA)
|
||||
: serviceAlias.name === aliasA
|
||||
? serviceAlias.name.includes(serviceAObjEntryPoint)
|
||||
: serviceAlias.name === serviceAObjEntryPoint
|
||||
})?.args?.methodSuffix
|
||||
|
||||
let serviceBAliases = serviceBInfo.alias ?? []
|
||||
@@ -204,7 +213,7 @@ ${serviceBObj.module}: {
|
||||
let aliasBOptions =
|
||||
serviceBObj.alias ??
|
||||
serviceBAliases.find((a) => {
|
||||
return a.args?.entity == serviceBKeyInfo
|
||||
return a.entity == serviceBKeyInfo
|
||||
})?.name
|
||||
|
||||
let aliasB = aliasBOptions
|
||||
@@ -218,10 +227,11 @@ ${serviceBObj.module}: {
|
||||
)
|
||||
}
|
||||
|
||||
const serviceBObjEntryPoint = camelToSnakeCase(serviceBObj.field)
|
||||
const serviceBMethodSuffix = serviceBAliases.find((serviceAlias) => {
|
||||
return Array.isArray(serviceAlias.name)
|
||||
? serviceAlias.name.includes(aliasB)
|
||||
: serviceAlias.name === aliasB
|
||||
? serviceAlias.name.includes(serviceBObjEntryPoint)
|
||||
: serviceAlias.name === serviceBObjEntryPoint
|
||||
})?.args?.methodSuffix
|
||||
|
||||
const moduleAPrimaryKeys = serviceAInfo.primaryKeys ?? []
|
||||
@@ -290,6 +300,7 @@ ${serviceBObj.module}: {
|
||||
relationships: [
|
||||
{
|
||||
serviceName: serviceAObj.module,
|
||||
entity: serviceAObj.entity,
|
||||
primaryKey: serviceAPrimaryKey,
|
||||
foreignKey: serviceAObj.key,
|
||||
alias: aliasA,
|
||||
@@ -300,6 +311,7 @@ ${serviceBObj.module}: {
|
||||
},
|
||||
{
|
||||
serviceName: serviceBObj.module,
|
||||
entity: serviceBObj.entity,
|
||||
primaryKey: serviceBPrimaryKey!,
|
||||
foreignKey: serviceBObj.key,
|
||||
alias: aliasB,
|
||||
@@ -316,6 +328,7 @@ ${serviceBObj.module}: {
|
||||
[serviceBObj.isList ? pluralize(aliasB) : aliasB]: {
|
||||
path: aliasB + "_link." + aliasB,
|
||||
isList: serviceBObj.isList,
|
||||
forwardArgumentsOnPath: [aliasB + "_link." + aliasB],
|
||||
},
|
||||
},
|
||||
relationship: {
|
||||
@@ -332,6 +345,7 @@ ${serviceBObj.module}: {
|
||||
[serviceAObj.isList ? pluralize(aliasA) : aliasA]: {
|
||||
path: aliasA + "_link." + aliasA,
|
||||
isList: serviceAObj.isList,
|
||||
forwardArgumentsOnPath: [aliasA + "_link." + aliasA],
|
||||
},
|
||||
},
|
||||
relationship: {
|
||||
|
||||
@@ -193,17 +193,17 @@ export function defineJoinerConfig(
|
||||
alias: [
|
||||
...[...(alias ?? ([] as any))].map((alias) => ({
|
||||
name: alias.name,
|
||||
entity: alias.entity,
|
||||
args: {
|
||||
entity: alias.args.entity,
|
||||
methodSuffix:
|
||||
alias.args.methodSuffix ??
|
||||
pluralize(upperCaseFirst(alias.args.entity)),
|
||||
alias.args?.methodSuffix ?? pluralize(upperCaseFirst(alias.entity)),
|
||||
},
|
||||
})),
|
||||
...deduplicatedLoadedModels
|
||||
.filter((model) => {
|
||||
return (
|
||||
!alias || !alias.some((alias) => alias.args?.entity === model.name)
|
||||
!alias ||
|
||||
!alias.some((alias) => alias.entity === upperCaseFirst(model.name))
|
||||
)
|
||||
})
|
||||
.map((entity, i) => ({
|
||||
@@ -211,8 +211,8 @@ export function defineJoinerConfig(
|
||||
`${camelToSnakeCase(entity.name).toLowerCase()}`,
|
||||
`${pluralize(camelToSnakeCase(entity.name).toLowerCase())}`,
|
||||
],
|
||||
entity: upperCaseFirst(entity.name),
|
||||
args: {
|
||||
entity: upperCaseFirst(entity.name),
|
||||
methodSuffix: pluralize(upperCaseFirst(entity.name)),
|
||||
},
|
||||
})),
|
||||
@@ -378,6 +378,7 @@ export function buildLinkConfigFromModelObjects<
|
||||
primaryKey: property,
|
||||
serviceName,
|
||||
field: lowerCaseFirst(model.name),
|
||||
entity: upperCaseFirst(model.name),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -412,6 +413,7 @@ export function buildLinkConfigFromLinkableKeys<
|
||||
primaryKey: inferredReferenceProperty,
|
||||
serviceName,
|
||||
field: keyName,
|
||||
entity: upperCaseFirst(modelName),
|
||||
}
|
||||
|
||||
linkConfig[keyName] ??= {
|
||||
|
||||
Reference in new issue
Block a user