Système de migration pour Midgar
$ npm i @midgar/migrate
Si tout s'est bien passé, un message de confirmation s'affiche:
#midgar-cli
@midgar/migrate added to plugins.json !
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.
Exemple de module de migration:
export default {
up: async (mid, ...storageArgs) => {
// Up script
},
down: async (mid, ...storageArgs) => {
// Down script
}
}
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
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
Affiche le nombre et la liste de migration en attente d'exécutions:
$ midgar migrate:down
--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
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
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)
})