@midgar/migrate
v1.0.0-alpha.3.0
Published
A migration plugin for Midgar
Downloads
8
Readme
@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.app = 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 App 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.app.on('@midgar/migrate:init', (migrateService) => {
migrateService.addStorage('monstorage', Storage)
})