128 lines
3.4 KiB
TypeScript
128 lines
3.4 KiB
TypeScript
import {
|
|
JoinerRelationship,
|
|
LoaderOptions,
|
|
Logger,
|
|
ModuleJoinerConfig,
|
|
ModuleServiceInitializeOptions,
|
|
} from "@medusajs/types"
|
|
import { generateEntity } from "../utils"
|
|
|
|
import { DALUtils, ModulesSdkUtils } from "@medusajs/utils"
|
|
|
|
export function getMigration(
|
|
joinerConfig: ModuleJoinerConfig,
|
|
serviceName: string,
|
|
primary: JoinerRelationship,
|
|
foreign: JoinerRelationship
|
|
) {
|
|
return async function runMigrations(
|
|
{
|
|
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
|
|
)
|
|
|
|
const tableName = entity.meta.collection
|
|
|
|
let hasTable = false
|
|
try {
|
|
await orm.em.getConnection().execute(`SELECT 1 FROM ${tableName} LIMIT 0`)
|
|
hasTable = true
|
|
} catch {}
|
|
|
|
const generator = orm.getSchemaGenerator()
|
|
if (hasTable) {
|
|
/* const updateSql = await generator.getUpdateSchemaSQL()
|
|
const entityUpdates = updateSql
|
|
.split(";")
|
|
.map((sql) => sql.trim())
|
|
.filter((sql) =>
|
|
sql.toLowerCase().includes(`alter table "${tableName.toLowerCase()}"`)
|
|
)
|
|
|
|
if (entityUpdates.length > 0) {
|
|
try {
|
|
await generator.execute(entityUpdates.join(";"))
|
|
logger.info(`Link module "${serviceName}" migration executed`)
|
|
} catch (error) {
|
|
logger.error(
|
|
`Link module "${serviceName}" migration failed to run - Error: ${error}`
|
|
)
|
|
}
|
|
} else {
|
|
logger.info(`Skipping "${tableName}" migration.`)
|
|
}*/
|
|
logger.info(
|
|
`Link module "${serviceName}" table update skipped because the table already exists. Please write your own migration if needed.`
|
|
)
|
|
} else {
|
|
try {
|
|
await generator.createSchema()
|
|
|
|
logger.info(`Link module "${serviceName}" migration executed`)
|
|
} catch (error) {
|
|
logger.error(
|
|
`Link module "${serviceName}" migration failed to run - Error: ${error}`
|
|
)
|
|
}
|
|
}
|
|
|
|
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()
|
|
}
|
|
}
|