diff --git a/integration-tests/api/__tests__/admin/stock-location/index.spec.ts b/integration-tests/api/__tests__/admin/stock-location/index.spec.ts index f3e090adb042..b54275a10ae1 100644 --- a/integration-tests/api/__tests__/admin/stock-location/index.spec.ts +++ b/integration-tests/api/__tests__/admin/stock-location/index.spec.ts @@ -245,6 +245,14 @@ medusaIntegrationTestRunner({ object: "stock_location", deleted: true, }) + + const stockLocations = await api.get( + `/admin/stock-locations`, + adminHeaders + ) + + expect(stockLocations.status).toEqual(200) + expect(stockLocations.data.stock_locations).toEqual([]) }) it("should successfully delete stock location associations", async () => { @@ -390,7 +398,7 @@ medusaIntegrationTestRunner({ stockLocationId = createResponse.data.stock_location.id }) - it("should create a fulfillment set for the location", async () => { + it("should create a fulfillment set for the location and then delete it and its associations", async () => { const response = await api.post( `/admin/stock-locations/${stockLocationId}/fulfillment-sets?fields=id,*fulfillment_sets`, { @@ -407,6 +415,19 @@ medusaIntegrationTestRunner({ id: expect.any(String), }), ]) + + await api.delete( + `/admin/stock-locations/${stockLocationId}`, + adminHeaders + ) + + const fulfillmentModule = appContainer.resolve( + ModuleRegistrationName.FULFILLMENT + ) + + const sets = await fulfillmentModule.list() + + expect(sets).toHaveLength(0) }) // This is really just to test the new Zod middleware. We don't need more of these. diff --git a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts index a0020471d94b..e88b6873d3b1 100644 --- a/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/cart.workflows.spec.ts @@ -1634,12 +1634,12 @@ medusaIntegrationTestRunner({ }, }, { - [Modules.FULFILLMENT]: { - fulfillment_set_id: fulfillmentSet.id, - }, [Modules.STOCK_LOCATION]: { stock_location_id: location.id, }, + [Modules.FULFILLMENT]: { + fulfillment_set_id: fulfillmentSet.id, + }, }, { [Modules.FULFILLMENT]: { @@ -1745,12 +1745,12 @@ medusaIntegrationTestRunner({ await remoteLink.create([ { - [Modules.FULFILLMENT]: { - fulfillment_set_id: fulfillmentSet.id, - }, [Modules.STOCK_LOCATION]: { stock_location_id: location.id, }, + [Modules.FULFILLMENT]: { + fulfillment_set_id: fulfillmentSet.id, + }, }, { [Modules.FULFILLMENT]: { @@ -1849,12 +1849,12 @@ medusaIntegrationTestRunner({ }, }, { - [Modules.FULFILLMENT]: { - fulfillment_set_id: fulfillmentSet.id, - }, [Modules.STOCK_LOCATION]: { stock_location_id: location.id, }, + [Modules.FULFILLMENT]: { + fulfillment_set_id: fulfillmentSet.id, + }, }, ]) diff --git a/integration-tests/modules/__tests__/cart/store/carts.spec.ts b/integration-tests/modules/__tests__/cart/store/carts.spec.ts index 23d27cee78b6..085553d4d2d5 100644 --- a/integration-tests/modules/__tests__/cart/store/carts.spec.ts +++ b/integration-tests/modules/__tests__/cart/store/carts.spec.ts @@ -1485,8 +1485,8 @@ medusaIntegrationTestRunner({ await remoteLinkService.create([ { - [Modules.FULFILLMENT]: { fulfillment_set_id: fulfillmentSet.id }, [Modules.STOCK_LOCATION]: { stock_location_id: stockLocation.id }, + [Modules.FULFILLMENT]: { fulfillment_set_id: fulfillmentSet.id }, }, ]) diff --git a/integration-tests/modules/__tests__/link-modules/fulfillment-set-location.spec.ts b/integration-tests/modules/__tests__/link-modules/fulfillment-set-location.spec.ts index 1033947f3d3b..a378f972f630 100644 --- a/integration-tests/modules/__tests__/link-modules/fulfillment-set-location.spec.ts +++ b/integration-tests/modules/__tests__/link-modules/fulfillment-set-location.spec.ts @@ -52,18 +52,18 @@ medusaIntegrationTestRunner({ await remoteLink.create([ { - [Modules.FULFILLMENT]: { - fulfillment_set_id: fulfillmentSet.id, - }, [Modules.STOCK_LOCATION]: { stock_location_id: euWarehouse.id, }, + [Modules.FULFILLMENT]: { + fulfillment_set_id: fulfillmentSet.id, + }, }, ]) const linkQuery = remoteQueryObjectFromString({ - entryPoint: "fulfillment_sets", - fields: ["id", "stock_locations.id"], + entryPoint: "stock_locations", + fields: ["id", "fulfillment_sets.id"], }) const link = await remoteQuery(linkQuery) @@ -72,10 +72,10 @@ medusaIntegrationTestRunner({ expect(link).toEqual( expect.arrayContaining([ expect.objectContaining({ - id: fulfillmentSet.id, - stock_locations: expect.arrayContaining([ + id: euWarehouse.id, + fulfillment_sets: expect.arrayContaining([ expect.objectContaining({ - id: euWarehouse.id, + id: fulfillmentSet.id, }), ]), }), diff --git a/integration-tests/modules/__tests__/shipping-options/store/shipping-options.spec.ts b/integration-tests/modules/__tests__/shipping-options/store/shipping-options.spec.ts index 4416d899076a..b7b2095ffba1 100644 --- a/integration-tests/modules/__tests__/shipping-options/store/shipping-options.spec.ts +++ b/integration-tests/modules/__tests__/shipping-options/store/shipping-options.spec.ts @@ -127,12 +127,12 @@ medusaIntegrationTestRunner({ await remoteLinkService.create([ { - [Modules.FULFILLMENT]: { - fulfillment_set_id: fulfillmentSet.id, - }, [Modules.STOCK_LOCATION]: { stock_location_id: stockLocation.id, }, + [Modules.FULFILLMENT]: { + fulfillment_set_id: fulfillmentSet.id, + }, }, ]) diff --git a/packages/core/core-flows/src/stock-location/steps/associate-locations-with-fulfillment-sets.ts b/packages/core/core-flows/src/stock-location/steps/associate-locations-with-fulfillment-sets.ts index bebbb21621af..c2a8add7e1e7 100644 --- a/packages/core/core-flows/src/stock-location/steps/associate-locations-with-fulfillment-sets.ts +++ b/packages/core/core-flows/src/stock-location/steps/associate-locations-with-fulfillment-sets.ts @@ -24,12 +24,12 @@ export const associateFulfillmentSetsWithLocationStep = createStep( .map((link) => { return link.fulfillment_set_ids.map((id) => { return { - [Modules.FULFILLMENT]: { - fulfillment_set_id: id, - }, [Modules.STOCK_LOCATION]: { stock_location_id: link.location_id, }, + [Modules.FULFILLMENT]: { + fulfillment_set_id: id, + }, } }) }) diff --git a/packages/core/core-flows/src/stock-location/steps/delete-stock-locations.ts b/packages/core/core-flows/src/stock-location/steps/delete-stock-locations.ts index 23f21a1d8652..245aa0765070 100644 --- a/packages/core/core-flows/src/stock-location/steps/delete-stock-locations.ts +++ b/packages/core/core-flows/src/stock-location/steps/delete-stock-locations.ts @@ -1,16 +1,24 @@ +import { + DeleteEntityInput, + ModuleRegistrationName, + Modules, +} from "@medusajs/modules-sdk" import { StepResponse, createStep } from "@medusajs/workflows-sdk" -import { ModuleRegistrationName } from "@medusajs/modules-sdk" - export const deleteStockLocationsStepId = "delete-stock-locations-step" export const deleteStockLocationsStep = createStep( deleteStockLocationsStepId, async (input: string[], { container }) => { const service = container.resolve(ModuleRegistrationName.STOCK_LOCATION) - await service.softDelete(input) + const softDeletedEntities = await service.softDelete(input) - return new StepResponse(void 0, input) + return new StepResponse( + { + [Modules.STOCK_LOCATION]: softDeletedEntities, + } as DeleteEntityInput, + input + ) }, async (deletedLocationIds, { container }) => { if (!deletedLocationIds?.length) { diff --git a/packages/core/core-flows/src/stock-location/workflows/delete-stock-locations.ts b/packages/core/core-flows/src/stock-location/workflows/delete-stock-locations.ts index ad4b1144970b..0cf5f9269a7a 100644 --- a/packages/core/core-flows/src/stock-location/workflows/delete-stock-locations.ts +++ b/packages/core/core-flows/src/stock-location/workflows/delete-stock-locations.ts @@ -1,8 +1,7 @@ import { WorkflowData, createWorkflow } from "@medusajs/workflows-sdk" -import { Modules } from "@medusajs/modules-sdk" -import { deleteStockLocationsStep } from "../steps" import { removeRemoteLinkStep } from "../../common/steps/remove-remote-links" +import { deleteStockLocationsStep } from "../steps" interface WorkflowInput { ids: string[] @@ -12,10 +11,8 @@ export const deleteStockLocationsWorkflowId = "delete-stock-locations-workflow" export const deleteStockLocationsWorkflow = createWorkflow( deleteStockLocationsWorkflowId, (input: WorkflowData) => { - deleteStockLocationsStep(input.ids) + const softDeletedEntities = deleteStockLocationsStep(input.ids) - removeRemoteLinkStep({ - [Modules.STOCK_LOCATION]: { stock_location_id: input.ids }, - }) + removeRemoteLinkStep(softDeletedEntities) } ) diff --git a/packages/core/types/src/dal/repository-service.ts b/packages/core/types/src/dal/repository-service.ts index f048136cdc73..5a50102ce625 100644 --- a/packages/core/types/src/dal/repository-service.ts +++ b/packages/core/types/src/dal/repository-service.ts @@ -3,8 +3,8 @@ import { Context } from "../shared-context" import { BaseFilterable, FilterQuery, - FindOptions, FilterQuery as InternalFilterQuery, + FindOptions, UpsertWithReplaceConfig, } from "./index" @@ -61,7 +61,11 @@ export interface RepositoryService extends BaseRepositoryService { * @returns [T[], Record] the second value being the map of the entity names and ids that were soft deleted */ softDelete( - idsOrFilter: string[] | InternalFilterQuery, + idsOrFilter: + | string + | string[] + | InternalFilterQuery + | InternalFilterQuery[], context?: Context ): Promise<[T[], Record]> diff --git a/packages/core/types/src/modules-sdk/internal-module-service.ts b/packages/core/types/src/modules-sdk/internal-module-service.ts index 0a8ecd35c8a6..784dea01fece 100644 --- a/packages/core/types/src/modules-sdk/internal-module-service.ts +++ b/packages/core/types/src/modules-sdk/internal-module-service.ts @@ -68,7 +68,11 @@ export interface InternalModuleService< ): Promise softDelete( - idsOrFilter: string[] | InternalFilterQuery, + idsOrFilter: + | string + | string[] + | InternalFilterQuery + | InternalFilterQuery[], sharedContext?: Context ): Promise<[TEntity[], Record]> diff --git a/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts b/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts index 8af2efcb834b..6a7d0c272aa6 100644 --- a/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts +++ b/packages/core/utils/src/dal/mikro-orm/mikro-orm-repository.ts @@ -14,7 +14,6 @@ import { LoadStrategy, ReferenceType, RequiredEntityData, - wrap, } from "@mikro-orm/core" import { FindOptions as MikroOptions } from "@mikro-orm/core/drivers/IDatabaseDriver" import { @@ -25,9 +24,9 @@ import { } from "@mikro-orm/core/typings" import { SqlEntityManager } from "@mikro-orm/postgresql" import { - MedusaError, arrayDifference, isString, + MedusaError, promiseAll, } from "../../common" import { buildQuery } from "../../modules-sdk" @@ -35,9 +34,9 @@ import { getSoftDeletedCascadedEntitiesIdsMappedBy, transactionWrapper, } from "../utils" -import { mikroOrmUpdateDeletedAtRecursively } from "./utils" -import { mikroOrmSerializer } from "./mikro-orm-serializer" import { dbErrorMapper } from "./db-error-mapper" +import { mikroOrmSerializer } from "./mikro-orm-serializer" +import { mikroOrmUpdateDeletedAtRecursively } from "./utils" export class MikroOrmBase { readonly manager_: any @@ -101,6 +100,17 @@ export class MikroOrmBaseRepository super(...arguments) } + static buildUniqueCompositeKeyValue(keys: string[], data: object) { + return keys.map((k) => data[k]).join("_") + } + + static retrievePrimaryKeys(entity: EntityClass | EntitySchema) { + return ( + (entity as EntitySchema).meta?.primaryKeys ?? + (entity as EntityClass).prototype.__meta.primaryKeys ?? ["id"] + ) + } + create(data: unknown[], context?: Context): Promise { throw new Error("Method not implemented.") } @@ -142,21 +152,14 @@ export class MikroOrmBaseRepository } async softDelete( - idsOrFilter: string[] | InternalFilterQuery, + filters: + | string + | string[] + | (FilterQuery & BaseFilterable>) + | (FilterQuery & BaseFilterable>)[], sharedContext: Context = {} ): Promise<[T[], Record]> { - const isArray = Array.isArray(idsOrFilter) - // TODO handle composite keys - const filter = - isArray || isString(idsOrFilter) - ? { - id: { - $in: isArray ? idsOrFilter : [idsOrFilter], - }, - } - : idsOrFilter - - const entities = await this.find({ where: filter as any }, sharedContext) + const entities = await this.find({ where: filters as any }, sharedContext) const date = new Date() const manager = this.getActiveManager(sharedContext) @@ -286,17 +289,6 @@ export function mikroOrmBaseRepositoryFactory( }) } - static buildUniqueCompositeKeyValue(keys: string[], data: object) { - return keys.map((k) => data[k]).join("_") - } - - static retrievePrimaryKeys(entity: EntityClass | EntitySchema) { - return ( - (entity as EntitySchema).meta?.primaryKeys ?? - (entity as EntityClass).prototype.__meta.primaryKeys ?? ["id"] - ) - } - async create(data: any[], context?: Context): Promise { const manager = this.getActiveManager(context) @@ -768,6 +760,32 @@ export function mikroOrmBaseRepositoryFactory( return orderedEntities } + + async softDelete( + filters: + | string + | string[] + | (FilterQuery & BaseFilterable>) + | (FilterQuery & BaseFilterable>)[], + sharedContext: Context = {} + ): Promise<[T[], Record]> { + const primaryKeys = + MikroOrmAbstractBaseRepository_.retrievePrimaryKeys(entity) + + const filterArray = Array.isArray(filters) ? filters : [filters] + const normalizedFilters: FilterQuery = { + $or: filterArray.map((filter) => { + // TODO: add support for composite keys + if (isString(filter)) { + return { [primaryKeys[0]]: filter } + } + + return filter + }), + } + + return await super.softDelete(normalizedFilters, sharedContext) + } } return MikroOrmAbstractBaseRepository_ as unknown as { diff --git a/packages/core/utils/src/link/links.ts b/packages/core/utils/src/link/links.ts index a68fd4e99fe4..7057d8c5a8ad 100644 --- a/packages/core/utils/src/link/links.ts +++ b/packages/core/utils/src/link/links.ts @@ -44,11 +44,11 @@ export const LINKS = { Modules.STOCK_LOCATION, "location_id" ), - FulfillmentSetLocation: composeLinkName( - Modules.FULFILLMENT, - "fulfillment_set_id", + LocationFulfillmentSet: composeLinkName( Modules.STOCK_LOCATION, - "location_id" + "stock_location_id", + Modules.FULFILLMENT, + "fulfillment_set_id" ), OrderPromotion: composeLinkName( Modules.ORDER, diff --git a/packages/core/utils/src/modules-sdk/abstract-module-service-factory.ts b/packages/core/utils/src/modules-sdk/abstract-module-service-factory.ts index 6e6ab83048a8..c300ad53c7e3 100644 --- a/packages/core/utils/src/modules-sdk/abstract-module-service-factory.ts +++ b/packages/core/utils/src/modules-sdk/abstract-module-service-factory.ts @@ -12,11 +12,11 @@ import { SoftDeleteReturn, } from "@medusajs/types" import { + MapToConfig, isString, kebabCase, lowerCaseFirst, mapObjectTo, - MapToConfig, pluralize, upperCaseFirst, } from "../common" diff --git a/packages/core/utils/src/modules-sdk/internal-module-service-factory.ts b/packages/core/utils/src/modules-sdk/internal-module-service-factory.ts index 7fbce6239166..26edd8a00417 100644 --- a/packages/core/utils/src/modules-sdk/internal-module-service-factory.ts +++ b/packages/core/utils/src/modules-sdk/internal-module-service-factory.ts @@ -19,13 +19,13 @@ import { MedusaError, shouldForceTransaction, } from "../common" +import { FreeTextSearchFilterKey } from "../dal" import { buildQuery } from "./build-query" import { InjectManager, InjectTransactionManager, MedusaContext, } from "./decorators" -import { FreeTextSearchFilterKey } from "../dal" type SelectorAndData = { selector: FilterQuery | BaseFilterable> @@ -440,10 +440,17 @@ export function internalModuleServiceFactory< @InjectTransactionManager(propertyRepositoryName) async softDelete( - idsOrFilter: string[] | InternalFilterQuery, + idsOrFilter: + | string + | string[] + | InternalFilterQuery + | InternalFilterQuery[], @MedusaContext() sharedContext: Context = {} ): Promise<[TEntity[], Record]> { - if (Array.isArray(idsOrFilter) && !idsOrFilter.length) { + if ( + (Array.isArray(idsOrFilter) && !idsOrFilter.length) || + (!Array.isArray(idsOrFilter) && !idsOrFilter) + ) { return [[], {}] } diff --git a/packages/modules/fulfillment/src/services/fulfillment-module-service.ts b/packages/modules/fulfillment/src/services/fulfillment-module-service.ts index 0aa40c53c994..27bcdba30d36 100644 --- a/packages/modules/fulfillment/src/services/fulfillment-module-service.ts +++ b/packages/modules/fulfillment/src/services/fulfillment-module-service.ts @@ -14,17 +14,17 @@ import { UpdateServiceZoneDTO, } from "@medusajs/types" import { - arrayDifference, EmitEvents, FulfillmentUtils, - getSetDifference, InjectManager, InjectTransactionManager, - isString, MedusaContext, MedusaError, Modules, ModulesSdkUtils, + arrayDifference, + getSetDifference, + isString, promiseAll, } from "@medusajs/utils" import { diff --git a/packages/modules/link-modules/src/definitions/fulfillment-set-location.ts b/packages/modules/link-modules/src/definitions/fulfillment-set-location.ts index d4703d5334a7..cc396595444d 100644 --- a/packages/modules/link-modules/src/definitions/fulfillment-set-location.ts +++ b/packages/modules/link-modules/src/definitions/fulfillment-set-location.ts @@ -2,54 +2,42 @@ import { Modules } from "@medusajs/modules-sdk" import { ModuleJoinerConfig } from "@medusajs/types" import { LINKS } from "@medusajs/utils" -export const FulfillmentSetLocation: ModuleJoinerConfig = { - serviceName: LINKS.FulfillmentSetLocation, +export const LocationFulfillmentSet: ModuleJoinerConfig = { + serviceName: LINKS.LocationFulfillmentSet, isLink: true, databaseConfig: { - tableName: "fulfillment_set_location", - idPrefix: "fsloc", + tableName: "location_fulfillment_set", + idPrefix: "locfs", }, alias: [ { - name: ["fulfillment_set_location", "fulfillment_set_locations"], + name: ["location_fulfillment_set", "location_fulfillment_sets"], args: { - entity: "LinkFulfillmentSetLocation", + entity: "LinkLocationFulfillmentSet", }, }, ], - primaryKeys: ["id", "fulfillment_set_id", "stock_location_id"], + primaryKeys: ["id", "stock_location_id", "fulfillment_set_id"], relationships: [ - { - serviceName: Modules.FULFILLMENT, - primaryKey: "id", - foreignKey: "fulfillment_set_id", - alias: "fulfillment_set", - }, { serviceName: Modules.STOCK_LOCATION, primaryKey: "id", foreignKey: "stock_location_id", alias: "location", }, - ], - extends: [ { serviceName: Modules.FULFILLMENT, - fieldAlias: { - stock_locations: "locations_link.location", - }, - relationship: { - serviceName: LINKS.FulfillmentSetLocation, - primaryKey: "fulfillment_set_id", - foreignKey: "id", - alias: "locations_link", - isList: true, - }, + primaryKey: "id", + foreignKey: "fulfillment_set_id", + alias: "fulfillment_set", + deleteCascade: true, }, + ], + extends: [ { serviceName: Modules.STOCK_LOCATION, relationship: { - serviceName: LINKS.FulfillmentSetLocation, + serviceName: LINKS.LocationFulfillmentSet, primaryKey: "stock_location_id", foreignKey: "id", alias: "fulfillment_set_link", @@ -59,5 +47,14 @@ export const FulfillmentSetLocation: ModuleJoinerConfig = { fulfillment_sets: "fulfillment_set_link.fulfillment_set", }, }, + { + serviceName: Modules.FULFILLMENT, + relationship: { + serviceName: LINKS.LocationFulfillmentSet, + primaryKey: "fulfillment_set_id", + foreignKey: "id", + alias: "locations_link", + }, + }, ], } diff --git a/packages/modules/link-modules/src/definitions/index.ts b/packages/modules/link-modules/src/definitions/index.ts index 4eb511e3ba57..e8685543897c 100644 --- a/packages/modules/link-modules/src/definitions/index.ts +++ b/packages/modules/link-modules/src/definitions/index.ts @@ -3,8 +3,8 @@ export * from "./cart-payment-collection" export * from "./cart-promotion" export * from "./cart-region" export * from "./cart-sales-channel" -export * from "./fulfillment-set-location" export * from "./inventory-level-stock-location" +export * from "./location-fulfillment-set" export * from "./order-customer" export * from "./order-promotion" export * from "./order-region" @@ -18,3 +18,4 @@ export * from "./region-payment-provider" export * from "./sales-channel-location" export * from "./shipping-option-price-set" export * from "./store-default-currency" + diff --git a/packages/modules/link-modules/src/definitions/location-fulfillment-set.ts b/packages/modules/link-modules/src/definitions/location-fulfillment-set.ts new file mode 100644 index 000000000000..cc396595444d --- /dev/null +++ b/packages/modules/link-modules/src/definitions/location-fulfillment-set.ts @@ -0,0 +1,60 @@ +import { Modules } from "@medusajs/modules-sdk" +import { ModuleJoinerConfig } from "@medusajs/types" +import { LINKS } from "@medusajs/utils" + +export const LocationFulfillmentSet: ModuleJoinerConfig = { + serviceName: LINKS.LocationFulfillmentSet, + isLink: true, + databaseConfig: { + tableName: "location_fulfillment_set", + idPrefix: "locfs", + }, + alias: [ + { + name: ["location_fulfillment_set", "location_fulfillment_sets"], + args: { + entity: "LinkLocationFulfillmentSet", + }, + }, + ], + primaryKeys: ["id", "stock_location_id", "fulfillment_set_id"], + relationships: [ + { + serviceName: Modules.STOCK_LOCATION, + primaryKey: "id", + foreignKey: "stock_location_id", + alias: "location", + }, + { + serviceName: Modules.FULFILLMENT, + primaryKey: "id", + foreignKey: "fulfillment_set_id", + alias: "fulfillment_set", + deleteCascade: true, + }, + ], + extends: [ + { + serviceName: Modules.STOCK_LOCATION, + relationship: { + serviceName: LINKS.LocationFulfillmentSet, + primaryKey: "stock_location_id", + foreignKey: "id", + alias: "fulfillment_set_link", + isList: true, + }, + fieldAlias: { + fulfillment_sets: "fulfillment_set_link.fulfillment_set", + }, + }, + { + serviceName: Modules.FULFILLMENT, + relationship: { + serviceName: LINKS.LocationFulfillmentSet, + primaryKey: "fulfillment_set_id", + foreignKey: "id", + alias: "locations_link", + }, + }, + ], +} diff --git a/packages/modules/stock-location-next/src/joiner-config.ts b/packages/modules/stock-location-next/src/joiner-config.ts index 2fab8c0a75b1..527125f9eca9 100644 --- a/packages/modules/stock-location-next/src/joiner-config.ts +++ b/packages/modules/stock-location-next/src/joiner-config.ts @@ -6,6 +6,7 @@ import moduleSchema from "./schema" export const LinkableKeys = { stock_location_id: StockLocation.name, + location_id: StockLocation.name, } const entityLinkableKeysMap: MapToConfig = {} @@ -21,10 +22,7 @@ export const entityNameToLinkableKeysMap: MapToConfig = entityLinkableKeysMap export const joinerConfig: ModuleJoinerConfig = { serviceName: Modules.STOCK_LOCATION, primaryKeys: ["id"], - linkableKeys: { - stock_location_id: StockLocation.name, - location_id: StockLocation.name, - }, + linkableKeys: LinkableKeys, schema: moduleSchema, alias: [ { diff --git a/packages/modules/stock-location-next/src/models/stock-location.ts b/packages/modules/stock-location-next/src/models/stock-location.ts index 4f9e542ac60f..f27140ee3b01 100644 --- a/packages/modules/stock-location-next/src/models/stock-location.ts +++ b/packages/modules/stock-location-next/src/models/stock-location.ts @@ -1,16 +1,18 @@ +import { + DALUtils, + Searchable, + createPsqlIndexStatementHelper, + generateEntityId, +} from "@medusajs/utils" import { BeforeCreate, Entity, + Filter, ManyToOne, OnInit, PrimaryKey, Property, } from "@mikro-orm/core" -import { - createPsqlIndexStatementHelper, - generateEntityId, - Searchable, -} from "@medusajs/utils" import { StockLocationAddress } from "./stock-location-address" @@ -21,6 +23,7 @@ const StockLocationDeletedAtIndex = createPsqlIndexStatementHelper({ }) @Entity() +@Filter(DALUtils.mikroOrmSoftDeletableFilterOptions) export class StockLocation { @PrimaryKey({ columnType: "text" }) id: string