Skip to content

midgarjs/migrate

Repository files navigation

Build Status Coverage

@midgar/migrate

Système de migration pour Midgar

Installation

$ npm i @midgar/migrate

Si tout s'est bien passé, un message de confirmation s'affiche:

#midgar-cli
@midgar/migrate added to plugins.json !

Fonctionnement

Ajoute les types de modules midgar-migrate-schema dans le dossier ./migrations/schemas et midgar-migrate-data,./migrations/data.

Les migration data sont exéctuté apres les schema. Ce plugin à besoin d'un storage pour fonctionner. Le storage sert a sauvegarder de facon permanante l'état des migrations.

module migration

Exemple de module de migration:

export default {
  up: async (mid, ...storageArgs) => {
    // Up script
  },
  down: async (mid, ...storageArgs) => {
    // Down script
  }
}

Commandes cli

Up

Exéctute up sur toutes les migrations en attente:

$ midgar migrate:up

Exéctute up sur les 3 premières migrations en attente:

$ midgar migrate:up 3

Down

Exéctute down sur toutes les migrations en executé:

$ midgar migrate:down

Exéctute down sur les 3 denière migrations en executé:

$ midgar migrate:down 3

Status

Affiche le nombre et la liste de migration en attente d'exécutions:

$ midgar migrate:down

Paramètre optionnels

--config chemin vers le dossier de configuration du projet:

$ midgar migrate:up --config ~/mon-project/src/config

--storage clef du storage:

$ midgar migrate:up --storage mongo

Storages

Exemple de storage:

/**
 * @typedef {Object} Migration
 * @property {string} plugin Plugin name
 * @property {string} name   Migration file name
 * @property {string} type   Migration type (schema|data)
 */


class Storage {
  constructor (mid) {
    this.mid = mid
  }

  /**
   * @return {<Promis<boolean>>}
   */
  async isInstalled () {
    return true
  }

  /**
   * @return {<Promis<Array<Mirgration>>>}
   */
  async getMigrations () {
    return []
  }

  /**
   * Save executed migration
   *
   * @param {string} plugin Plugin name
   * @param {string} name   Migration file name
   * @param {string} type   Migration type (schema|data)
   *
   * @return {Promise<void>}
   */
  async saveMigration (plugin, name, type) {}

  /**
   * Delete executed migration
   *
   * @param {string} plugin Plugin name
   * @param {string} name   Migration file name
   * @param {string} type   Migration type (schema|data)
   * 
   * @return {Promise<void>}
   */
  async deleteMigration (plugin, name, type) {}

  /**
   * Retrun migation function args after midgar instance 
   * 
   * @return {Array<any>}
   */
  getCallArgs () {
    return []
  }
}

export default Storage

Ajouter le storate

Depuis la méthode init du plugin:

import Storage from './libs/migrate-storage.js'
...
this.mid.on('@midgar/migrate:init', (migrateService) => {
  migrateService.addStorage('monstorage', Storage)
})

documentation Api.

Releases

No releases published

Packages

No packages published