chore: better handle retrieving migrations
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
import type { Payload } from '../..'
|
||||
import type { MigrationData } from '../types'
|
||||
|
||||
/**
|
||||
* Gets all existing migrations from the database, excluding the dev migration
|
||||
*/
|
||||
export async function getMigrations({
|
||||
payload,
|
||||
}: {
|
||||
@@ -10,6 +13,11 @@ export async function getMigrations({
|
||||
collection: 'payload-migrations',
|
||||
limit: 0,
|
||||
sort: '-name',
|
||||
where: {
|
||||
batch: {
|
||||
not_equals: -1,
|
||||
},
|
||||
},
|
||||
})
|
||||
|
||||
const existingMigrations = migrationQuery.docs as unknown as MigrationData[]
|
||||
|
||||
@@ -13,20 +13,16 @@ export async function migrateDown(this: BaseDatabaseAdapter): Promise<void> {
|
||||
payload,
|
||||
})
|
||||
|
||||
const migrationsToRollback = existingMigrations.filter(
|
||||
(migration) => migration.batch === latestBatch && migration.batch !== -1,
|
||||
)
|
||||
|
||||
if (!migrationsToRollback?.length) {
|
||||
if (!existingMigrations?.length) {
|
||||
payload.logger.info({ msg: 'No migrations to rollback.' })
|
||||
return
|
||||
}
|
||||
|
||||
payload.logger.info({
|
||||
msg: `Rolling back batch ${latestBatch} consisting of ${migrationsToRollback.length} migration(s).`,
|
||||
msg: `Rolling back batch ${latestBatch} consisting of ${existingMigrations.length} migration(s).`,
|
||||
})
|
||||
|
||||
for (const migration of migrationsToRollback) {
|
||||
for (const migration of existingMigrations) {
|
||||
const migrationFile = migrationFiles.find((m) => m.name === migration.name)
|
||||
if (!migrationFile) {
|
||||
throw new Error(`Migration ${migration.name} not found locally.`)
|
||||
@@ -57,7 +53,7 @@ export async function migrateDown(this: BaseDatabaseAdapter): Promise<void> {
|
||||
err,
|
||||
msg: `Error running migration ${migrationFile.name}`,
|
||||
})
|
||||
throw err
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,25 +16,21 @@ export async function migrateRefresh(this: BaseDatabaseAdapter) {
|
||||
payload,
|
||||
})
|
||||
|
||||
const migrationsToRollback = existingMigrations.filter(
|
||||
(migration) => migration.batch === latestBatch && migration.batch !== -1,
|
||||
)
|
||||
|
||||
if (!migrationsToRollback?.length) {
|
||||
if (!existingMigrations?.length) {
|
||||
payload.logger.info({ msg: 'No migrations to rollback.' })
|
||||
return
|
||||
}
|
||||
|
||||
payload.logger.info({
|
||||
msg: `Rolling back batch ${latestBatch} consisting of ${migrationsToRollback.length} migration(s).`,
|
||||
msg: `Rolling back batch ${latestBatch} consisting of ${existingMigrations.length} migration(s).`,
|
||||
})
|
||||
|
||||
let transactionID
|
||||
|
||||
// Reverse order of migrations to rollback
|
||||
migrationsToRollback.reverse()
|
||||
existingMigrations.reverse()
|
||||
|
||||
for (const migration of migrationsToRollback) {
|
||||
for (const migration of existingMigrations) {
|
||||
try {
|
||||
const migrationFile = migrationFiles.find((m) => m.name === migration.name)
|
||||
if (!migrationFile) {
|
||||
@@ -69,7 +65,7 @@ export async function migrateRefresh(this: BaseDatabaseAdapter) {
|
||||
err,
|
||||
msg,
|
||||
})
|
||||
throw err
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,11 +91,15 @@ export async function migrateRefresh(this: BaseDatabaseAdapter) {
|
||||
payload.logger.info({ msg: `Migrated: ${migration.name} (${Date.now() - start}ms)` })
|
||||
} catch (err: unknown) {
|
||||
await this.rollbackTransaction(transactionID)
|
||||
let msg = `Error running migration ${migration.name}. Rolling back.`
|
||||
if (err instanceof Error) {
|
||||
msg += ` ${err.message}`
|
||||
}
|
||||
payload.logger.error({
|
||||
err,
|
||||
msg: `Error running migration ${migration.name}. Rolling back.`,
|
||||
msg,
|
||||
})
|
||||
throw err
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user