feat(medusa, modules-sdk, types, utils): Re work modules loading and remove legacy functions (#5496)
This commit is contained in:
committed by
GitHub
parent
ca411e54eb
commit
154c9b43bd
@@ -6,20 +6,72 @@ import { composeTableName } from "./compose-link-name"
|
||||
export function generateGraphQLSchema(
|
||||
joinerConfig: ModuleJoinerConfig,
|
||||
primary: ModuleJoinerRelationship,
|
||||
foreign: ModuleJoinerRelationship
|
||||
foreign: ModuleJoinerRelationship,
|
||||
{ logger }: { logger } = { logger: console }
|
||||
) {
|
||||
const fieldNames = primary.foreignKey.split(",").concat(foreign.foreignKey)
|
||||
let fieldNames!: string[]
|
||||
let entityName!: string
|
||||
|
||||
const entityName = toPascalCase(
|
||||
"Link_" +
|
||||
(joinerConfig.databaseConfig?.tableName ??
|
||||
composeTableName(
|
||||
primary.serviceName,
|
||||
primary.foreignKey,
|
||||
foreign.serviceName,
|
||||
foreign.foreignKey
|
||||
))
|
||||
)
|
||||
if (!joinerConfig.isReadOnlyLink) {
|
||||
fieldNames = primary.foreignKey.split(",").concat(foreign.foreignKey)
|
||||
|
||||
entityName = toPascalCase(
|
||||
"Link_" +
|
||||
(joinerConfig.databaseConfig?.tableName ??
|
||||
composeTableName(
|
||||
primary.serviceName,
|
||||
primary.foreignKey,
|
||||
foreign.serviceName,
|
||||
foreign.foreignKey
|
||||
))
|
||||
)
|
||||
}
|
||||
|
||||
let typeDef = ""
|
||||
|
||||
for (const extend of joinerConfig.extends ?? []) {
|
||||
const extendedModule = MedusaModule.getModuleInstance(extend.serviceName)
|
||||
if (!extendedModule && !extend.relationship.isInternalService) {
|
||||
throw new Error(
|
||||
`Module ${extend.serviceName} not found. Please verify that the module is configured and installed, also the module must be loaded before the link modules.`
|
||||
)
|
||||
}
|
||||
|
||||
const extJoinerConfig = MedusaModule.getJoinerConfig(
|
||||
extend.relationship.serviceName
|
||||
)
|
||||
let extendedEntityName =
|
||||
extJoinerConfig?.linkableKeys?.[extend.relationship.foreignKey]!
|
||||
|
||||
if (!extendedEntityName && (!primary || !foreign)) {
|
||||
logger.warn(
|
||||
`Link modules schema: No linkable key found for ${extend.relationship.foreignKey} on module ${extend.relationship.serviceName}.`
|
||||
)
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
const fieldName = camelToSnakeCase(
|
||||
lowerCaseFirst(extend.relationship.alias)
|
||||
)
|
||||
|
||||
let type = extend.relationship.isList ? `[${entityName}]` : entityName
|
||||
if (extJoinerConfig?.isReadOnlyLink) {
|
||||
type = extend.relationship.isList
|
||||
? `[${extendedEntityName}]`
|
||||
: extendedEntityName
|
||||
}
|
||||
|
||||
typeDef += `
|
||||
extend type ${extend.serviceName} {
|
||||
${fieldName}: ${type}
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
if (joinerConfig.isReadOnlyLink) {
|
||||
return typeDef
|
||||
}
|
||||
|
||||
// Pivot table fields
|
||||
const fields = fieldNames.reduce((acc, curr) => {
|
||||
@@ -48,7 +100,7 @@ export function generateGraphQLSchema(
|
||||
composeTableName(foreign.serviceName)
|
||||
)}`
|
||||
|
||||
let typeDef = `
|
||||
typeDef += `
|
||||
type ${entityName} {
|
||||
${(Object.entries(fields) as any)
|
||||
.map(
|
||||
@@ -66,36 +118,6 @@ export function generateGraphQLSchema(
|
||||
}
|
||||
`
|
||||
|
||||
for (const extend of joinerConfig.extends ?? []) {
|
||||
const extendedModule = MedusaModule.getModuleInstance(extend.serviceName)
|
||||
if (!extendedModule && !extend.relationship.isInternalService) {
|
||||
throw new Error(
|
||||
`Module ${extend.serviceName} not found. Please verify that the module is configured and installed, also the module must be loaded before the link modules.`
|
||||
)
|
||||
}
|
||||
|
||||
const joinerConfig = MedusaModule.getJoinerConfig(extend.serviceName)
|
||||
let extendedEntityName =
|
||||
joinerConfig?.linkableKeys?.[extend.relationship.primaryKey]!
|
||||
|
||||
if (!extendedEntityName) {
|
||||
continue
|
||||
}
|
||||
|
||||
extendedEntityName = toPascalCase(extendedEntityName)
|
||||
|
||||
const linkTableFieldName = camelToSnakeCase(
|
||||
lowerCaseFirst(extend.relationship.alias)
|
||||
)
|
||||
const type = extend.relationship.isList ? `[${entityName}]` : entityName
|
||||
|
||||
typeDef += `
|
||||
extend type ${extendedEntityName} {
|
||||
${linkTableFieldName}: ${type}
|
||||
}
|
||||
`
|
||||
}
|
||||
|
||||
return typeDef
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user