chore: joiner config entity property (#9084)

This commit is contained in:
Carlos R. L. Rodrigues authored and GitHub committed 2024-09-11 06:25:25 -03:00
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)
}
)
@@ -55,7 +55,7 @@ export const maybeUnsetDefaultBillingAddressesStep = createStep(
ModuleRegistrationName.CUSTOMER
)
await customerModuleService.updateAddresses(
await customerModuleService.updateCustomerAddresses(
{ id: addressesToSet },
{ is_default_billing: true }
)
@@ -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 }
)
@@ -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
+30 -24
View File
@@ -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
View File
@@ -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] ??= {