Migration Script menggunakan [Umzug] untuk [Sequelize]
Migration script adalah script yang digunakan untuk memudahkan kita dalam melakukan migrasi baik berupa environment atau hanya sekedar database. Dalam studi kasus PPL kali ini, kelompok kami hanya akan melakukan migrasi database. Walaupun terkesan sederhana tetapi migration script sangat bermanfaat dan bisa memudahkan pekerjaan.
Migratio
n Script itu apa?
Secara sederhana, migration script dapat membantu kita untuk melakukan migrasi, bisa berupa perubahan versi aplikasi ataupun pindah server. Ilustrasi sederhana yang dapat menggambarkan migration script adalah pindah rumah. Pada saat pindah dari rumah, maka kita akan berkemas untuk memindahkan barang-barang yang ada di dalam rumah kita untuk dipindahkan ke rumah yang baru. Bayangkan proses memindahkan barang-barang yang ada, hingga pemasangan di rumah yang baru dilakukan oleh sebuah migration script sehingga mempermudah kita dalam pindah rumah.
Pada kenyataannya, migration script dalam database biasa digunakan untuk melakukan drop table, membuat table baru, menambahkan column baru pada table, atau melakukan split table. Migration script dapat dibuat secara manual oleh database programmer atau dibuat secara otomatis.
Sequeliz
e
Sequelizeadalah adalah ORM dengan tipe promise untuk Node.js yang dapat mendukung dialeg MySQL.Sequelizesangat mudah untuk digunakan dalam pengembangan aplikasi berbasis Node.js.
Mode
l
Sequelizedigunakan dalam pembuatan model. Berikut adalah contoh model menggunakanSequelize.
12345678910111213141516171819```module.exports =function(sequelize, DataTypes){returnsequelize.define(“employees”, {email: DataTypes.STRING,password: DataTypes.TEXT,name: DataTypes.TEXT,join_date: DataTypes.DATE,place_of_birth: DataTypes.TEXT,date_of_birth: DataTypes.DATEONLY,is_admin: DataTypes.BOOLEAN,salary: DataTypes.INTEGER,retire_date: DataTypes.DATE}, {tableName:’employees’,indexes: [{unique:true,fields: [’email’]}]});};```
Dalam kasus ini, kita membuat sebuah module yang akan mengembalikan objectSequelizeemployees beserta datatype yang sesuai.
Umzu
g
Umzugadalah sebuah agnostic migration tool framework untuk Node.js. Secara spesifik tool ini tidak dikhususkan untuk database, tapi menyediakan API yang baik dan mendukungSequelize.
Instalas
i
Untuk melakukan instalasiUmzug, dapat dilakukan sebagai berikut:
1```npm install –save umzug```
Penggunaa
n
Secara umum, untuk menggunakanUmzugyang harus dilakukan adalah sebagai berikut:
12345```varumzug =require(‘umzug’);varumzug =newumzug({});umzug.someMethod().then(function(result){// lakukan sesuatu dengan hasilnya});```
Dalam kasus migrasi,Umzugdigunakan untuk memanggil migration up sebagai berikut:
1234```umzug.up().then(function(migrations){// “migrations” will be an Array with the names of the// executed migrations.});```
Implementas
i
Setelah membahas cara instalasi dan penggunaanUmzug, maka kita akan membahas tahap implementasi. Berikut adalah potongan kode yang digunakan untuk menjalankan migrasi.
123456789101112131415161718192021222324```// … define other variable herevarumzug] =require(‘umzug’);varumzug] =newumzug({storage:‘sequelize’,storageOptions: {sequelize: model.sequelize,tableName:’_migration’},logging:false,upName:‘up’,downName:‘down’,migrations: {params: [model.sequelize.getQueryInterface(), Sequelize],path:‘migrations’,pattern:/^.*.js$/,}});umzug.up().then(function(migrations, err){console.log(migrations);app.listen(3000,function(){console.log(’listening on port 3000’);});});```
Dalam kasus ini, model adalah seluruh file yang menjadi model dan disimpan dalam folder models. Seluruh file migration akan disimpan dalam folder migrations. Perintah umzug.up() akan menjalankan migrasi yang ada, setelah selesai melaksanakan migrasi akan menjalankan server (app) pada port 3000.
Berikut adalah salah satu contoh module migrasi untuk melakukan drop table.
123456```module.exports = {up:function(QueryInterface, Sequelize){returnQueryInterface.dropAllTables();},down:function(QueryInterface, Sequelize){}};```
Berikut adalah salah satu contoh module migrasi untuk membuat table employees.
123456789101112131415161718192021222324252627282930313233343536373839404142434445```module.exports = {up:function(QueryInterface, Sequelize){returnQueryInterface.createTable(“employees”, {id: {type: Sequelize.INTEGER,primaryKey:true,autoIncrement:true},email: {type: Sequelize.STRING,unique:true,allowNull:false},password: {type: Sequelize.STRING,allowNull:false},name: {type: Sequelize.STRING,allowNull:false},join_date: {type: Sequelize.DATE,allowNull:false},place_of_birth: Sequelize.STRING,date_of_birth: {type: Sequelize.DATEONLY,allowNull:false},is_admin: {type: Sequelize.BOOLEAN,allowNull:false},salary: {type: Sequelize.INTEGER,allowNull:false},retire_date: Sequelize.DATE}, {});},down:function(QueryInterface){returnQueryInterface.dropTable(tableName);}};```
Kesimpula
n
Dalam pembuatan migration script sebagai bagian dari provisioning script dalam tugas PPL ini, saya sangat menyadari betapa penting dan bermanfaatnya penggunaaan migration script dalam memudahkan pekerjaan kita apabila melakukan migrasi aplikasi.