| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // @ts-check
- const {
- db,
- getCollectionNames,
- getCollectionInternal,
- waitForDb,
- } = require('../../app/src/infrastructure/mongodb')
- async function addIndexesToCollection(collection, indexes) {
- return Promise.all(
- indexes.map(index => {
- index.background = true
- return collection.createIndex(index.key, index)
- })
- )
- }
- async function dropIndexesFromCollection(collection, indexes) {
- return Promise.all(
- indexes.map(async index => {
- try {
- await collection.dropIndex(index.name)
- } catch (err) {
- if (err.code === 27 /* IndexNotFound */) {
- console.log(`Index ${index.name} not found; drop was a no-op.`)
- } else {
- throw err
- }
- }
- })
- )
- }
- async function dropCollection(collectionName) {
- await waitForDb()
- if (db[collectionName]) {
- throw new Error(`blocking drop of an active collection: ${collectionName}`)
- }
- const allCollections = await getCollectionNames()
- if (!allCollections.includes(collectionName)) return
- const collection = await getCollectionInternal(collectionName)
- await collection.drop()
- }
- /**
- * Asserts that a dependent migration has run. Throws an error otherwise.
- *
- * @param {string} migrationName
- */
- async function assertDependency(migrationName) {
- await waitForDb()
- const migrations = await getCollectionInternal('migrations')
- const migration = await migrations.findOne({ name: migrationName })
- if (migration == null) {
- throw new Error(
- `Bad migration order: ${migrationName} should run before this migration`
- )
- }
- }
- module.exports = {
- addIndexesToCollection,
- dropIndexesFromCollection,
- dropCollection,
- assertDependency,
- }
|