feat(core-flows,modules-sdk,types,medusa,link-modules): adds variant <> inventory item link endpoints (#7576)
what: - adds variant inventory link management endpoints: ``` Link inventory item to variant POST /products/:id/variants/:vid/inventory-items Update variant's inventory item link POST /products/:id/variants/:vid/inventory-items/:iid Unlink variant's inventory item DELETE /products/:id/variants/:vid/inventory-items/:iid ``` - a batch endpoint that does the above 3 across variants ``` POST /products/:id/variants/inventory-items ```
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
import {
|
||||
InternalModuleDeclaration,
|
||||
MedusaModule,
|
||||
MODULE_RESOURCE_TYPE,
|
||||
MODULE_SCOPE,
|
||||
MedusaModule,
|
||||
ModuleRegistrationName,
|
||||
} from "@medusajs/modules-sdk"
|
||||
import {
|
||||
@@ -16,6 +16,7 @@ import {
|
||||
ModuleServiceInitializeOptions,
|
||||
} from "@medusajs/types"
|
||||
import {
|
||||
arrayDifference,
|
||||
ContainerRegistrationKeys,
|
||||
lowerCaseFirst,
|
||||
simpleHash,
|
||||
@@ -50,7 +51,9 @@ export const initialize = async (
|
||||
)
|
||||
|
||||
for (const linkDefinition of allLinksToLoad) {
|
||||
const definition = JSON.parse(JSON.stringify(linkDefinition))
|
||||
const definition: ModuleJoinerConfig = JSON.parse(
|
||||
JSON.stringify(linkDefinition)
|
||||
)
|
||||
|
||||
const [primary, foreign] = definition.relationships ?? []
|
||||
|
||||
@@ -65,6 +68,24 @@ export const initialize = async (
|
||||
throw new Error(`Foreign key cannot be a composed key.`)
|
||||
}
|
||||
|
||||
if (Array.isArray(definition.extraDataFields)) {
|
||||
const extraDataFields = definition.extraDataFields
|
||||
const definedDbFields = Object.keys(
|
||||
definition.databaseConfig?.extraFields || {}
|
||||
)
|
||||
const difference = arrayDifference(extraDataFields, definedDbFields)
|
||||
|
||||
if (difference.length) {
|
||||
throw new Error(
|
||||
`extraDataFields (fieldNames: ${difference.join(
|
||||
","
|
||||
)}) need to be configured under databaseConfig (serviceName: ${
|
||||
definition.serviceName
|
||||
}).`
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
const serviceKey = !definition.isReadOnlyLink
|
||||
? lowerCaseFirst(
|
||||
definition.serviceName ??
|
||||
@@ -112,7 +133,10 @@ export const initialize = async (
|
||||
logger,
|
||||
})
|
||||
|
||||
definition.alias ??= []
|
||||
if (!Array.isArray(definition.alias)) {
|
||||
definition.alias = definition.alias ? [definition.alias] : []
|
||||
}
|
||||
|
||||
for (const alias of definition.alias) {
|
||||
alias.args ??= {}
|
||||
|
||||
|
||||
@@ -1,11 +1,23 @@
|
||||
import { Constructor, ILinkModule, ModuleJoinerConfig } from "@medusajs/types"
|
||||
import { isDefined } from "@medusajs/utils"
|
||||
import { LinkModuleService } from "@services"
|
||||
|
||||
export function getModuleService(
|
||||
joinerConfig: ModuleJoinerConfig
|
||||
): Constructor<ILinkModule> {
|
||||
const joinerConfig_ = JSON.parse(JSON.stringify(joinerConfig))
|
||||
const databaseConfig = joinerConfig_.databaseConfig
|
||||
|
||||
delete joinerConfig_.databaseConfig
|
||||
|
||||
// If extraDataFields is not defined, pick the fields to populate and validate from the
|
||||
// database config if any fields are provided.
|
||||
if (!isDefined(joinerConfig_.extraDataFields)) {
|
||||
joinerConfig_.extraDataFields = Object.keys(
|
||||
databaseConfig.extraFields || {}
|
||||
)
|
||||
}
|
||||
|
||||
return class LinkService extends LinkModuleService<unknown> {
|
||||
override __joinerConfig(): ModuleJoinerConfig {
|
||||
return joinerConfig_ as ModuleJoinerConfig
|
||||
|
||||
Reference in New Issue
Block a user