adapter.mjs 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import Path from 'path'
  2. import mongodb from '../../app/src/infrastructure/mongodb.js'
  3. import Mongoose from '../../app/src/infrastructure/Mongoose.js'
  4. import { fileURLToPath } from 'url'
  5. const __filename = fileURLToPath(import.meta.url)
  6. const __dirname = Path.dirname(__filename)
  7. const { db, waitForDb } = mongodb
  8. const { getNativeDb } = Mongoose
  9. class Adapter {
  10. constructor(params) {
  11. if (
  12. !process.env.SKIP_TAG_CHECK &&
  13. !process.argv.includes('create') &&
  14. !(process.argv.includes('-t') || process.argv.includes('--tags'))
  15. ) {
  16. console.error("ERROR: must pass tags using '-t' or '--tags', exiting")
  17. process.exit(1)
  18. }
  19. this.params = params || {}
  20. }
  21. getTemplatePath() {
  22. return Path.resolve(__dirname, 'template.mjs')
  23. }
  24. async connect() {
  25. await waitForDb()
  26. const nativeDb = await getNativeDb()
  27. return { db, nativeDb }
  28. }
  29. disconnect() {
  30. return Promise.resolve()
  31. }
  32. async getExecutedMigrationNames() {
  33. const { db } = await this.connect()
  34. const migrations = await db.migrations
  35. .find({}, { sort: { migratedAt: 1 }, projection: { name: 1 } })
  36. .toArray()
  37. return migrations.map(migration => migration.name)
  38. }
  39. async markExecuted(name) {
  40. const { db } = await this.connect()
  41. return db.migrations.insertOne({
  42. name,
  43. migratedAt: new Date(),
  44. })
  45. }
  46. async unmarkExecuted(name) {
  47. const { db } = await this.connect()
  48. return db.migrations.deleteOne({
  49. name,
  50. })
  51. }
  52. }
  53. export default Adapter