chore: better handle retrieving migrations

This commit is contained in:
Elliot DeNolf
2023-10-07 19:22:01 -04:00
parent 450a648e7e
commit 9574444b57
3 changed files with 23 additions and 19 deletions

View File

@@ -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[]

View File

@@ -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)
}
}
}

View File

@@ -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)
}
}
}