fix(medusa, modules-sdk): Fix migrate command and fix revert support (#7340)

This commit is contained in:
Adrien de Peretti
2024-05-15 15:46:23 +02:00
committed by GitHub
parent bb2b041954
commit 13ce60b999
4 changed files with 163 additions and 73 deletions

View File

@@ -22,7 +22,7 @@ import {
toPascalCase,
} from "@medusajs/utils"
import * as linkDefinitions from "../definitions"
import { getMigration } from "../migration"
import { getMigration, getRevertMigration } from "../migration"
import { InitializeModuleInjectableDependencies } from "../types"
import {
composeLinkName,
@@ -164,12 +164,13 @@ export const initialize = async (
return allLinks
}
export async function runMigrations(
async function applyMigrationUpOrDown(
{
options,
logger,
}: Omit<LoaderOptions<ModuleServiceInitializeOptions>, "container">,
modulesDefinition?: ModuleJoinerConfig[]
modulesDefinition?: ModuleJoinerConfig[],
revert = false
) {
const modulesLoadedKeys = MedusaModule.getLoadedModules().map(
(mod) => Object.keys(mod)[0]
@@ -215,7 +216,29 @@ export async function runMigrations(
continue
}
const migrate = getMigration(definition, serviceKey, primary, foreign)
const migrate = revert
? getRevertMigration(definition, serviceKey, primary, foreign)
: getMigration(definition, serviceKey, primary, foreign)
await migrate({ options, logger })
}
}
export async function runMigrations(
{
options,
logger,
}: Omit<LoaderOptions<ModuleServiceInitializeOptions>, "container">,
modulesDefinition?: ModuleJoinerConfig[]
) {
await applyMigrationUpOrDown({ options, logger }, modulesDefinition)
}
export async function revertMigrations(
{
options,
logger,
}: Omit<LoaderOptions<ModuleServiceInitializeOptions>, "container">,
modulesDefinition?: ModuleJoinerConfig[]
) {
await applyMigrationUpOrDown({ options, logger }, modulesDefinition, true)
}

View File

@@ -84,3 +84,44 @@ export function getMigration(
await orm.close()
}
}
export function getRevertMigration(
joinerConfig: ModuleJoinerConfig,
serviceName: string,
primary: JoinerRelationship,
foreign: JoinerRelationship
) {
return async function revertMigrations(
{
options,
logger,
}: Pick<
LoaderOptions<ModuleServiceInitializeOptions>,
"options" | "logger"
> = {} as any
) {
logger ??= console as unknown as Logger
const dbData = ModulesSdkUtils.loadDatabaseConfig("link_modules", options)
const entity = generateEntity(joinerConfig, primary, foreign)
const pathToMigrations = __dirname + "/../migrations"
const orm = await DALUtils.mikroOrmCreateConnection(
dbData,
[entity],
pathToMigrations
)
try {
const migrator = orm.getMigrator()
await migrator.down()
logger.info(`Link module "${serviceName}" migration executed`)
} catch (error) {
logger.error(
`Link module "${serviceName}" migration failed to run - Error: ${error}`
)
}
await orm.close()
}
}