# 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.
# [](#Migration-Script-itu-apa)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.
# [](#Sequelize)Sequeliz

e

[Sequelize](http://docs.sequelizejs.com/en/v3/)adalah adalah ORM dengan tipe promise untuk Node.js yang dapat mendukung dialeg MySQL.[Sequelize](http://docs.sequelizejs.com/en/v3/)sangat mudah untuk digunakan dalam pengembangan aplikasi berbasis Node.js.
## [](#Model)Mode

l


[Sequelize](http://docs.sequelizejs.com/en/v3/)digunakan dalam pembuatan model. Berikut adalah contoh model menggunakan[Sequelize](http://docs.sequelizejs.com/en/v3/).
```
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 object[Sequelize](http://docs.sequelizejs.com/en/v3/)employees beserta datatype yang sesuai.
# [](#Umzug)Umzu

g

[Umzug](https://github.com/sequelize/umzug)adalah sebuah agnostic migration tool framework untuk Node.js. Secara spesifik tool ini tidak dikhususkan untuk database, tapi menyediakan API yang baik dan mendukung[Sequelize](http://docs.sequelizejs.com/en/v3/).
### [](#Instalasi)Instalas

i


Untuk melakukan instalasi[Umzug](https://github.com/sequelize/umzug), dapat dilakukan sebagai berikut:
```
1```

```
npm install --save umzug```

### [](#Penggunaan)Penggunaa

n


Secara umum, untuk menggunakan[Umzug](https://github.com/sequelize/umzug)yang harus dilakukan adalah sebagai berikut:
```
12345```

```
varumzug =require('umzug');varumzug =newumzug({});umzug.someMethod().then(function(result){// lakukan sesuatu dengan hasilnya});```


Dalam kasus migrasi,[Umzug](https://github.com/sequelize/umzug)digunakan untuk memanggil migration up sebagai berikut:
```
1234```

```
umzug.up().then(function(migrations){// "migrations" will be an Array with the names of the// executed migrations.});```

### [](#Implementasi)Implementas

i


Setelah membahas cara instalasi dan penggunaan[Umzug](https://github.com/sequelize/umzug), 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);}};```

# [](#Kesimpulan)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.

