Kamu akan membuat aplikasi system bank sederhana menggunakan Express dan Sequelize. Baca tiap specification dengan baik, ikuti apa yang diminta.
Install dependencies seperti: express, sequelize, dll. Inisialisasi project kalian menggunakan command yang disediakan oleh sequelize. Isi konfigurasi database, database HARUS diberi nama holidays_challenge.
Buatlah migration dan model untuk:
-
Customer
- identityNumber (string)
- fullName (string)
- address (string)
- birthDate (date)
- accountNumber (string)
- gender (string)
-
Account
- type (string)
- balance (string)
Relasi antar Model adalah 1 Customer
dapat memiliki banyak Account
, 1 Account
hanya dimiliki oleh 1 Customer
;
Kamu boleh menambahkan kolom baru untuk memenuhi requirement relasi diatas
Buatlah migration untuk requirement dibawah:
- Untuk mengubah type data kolom
balance
menjadi float (HINT) - Untuk menambah kolom
accountNumber
bertipe string pada Accounts - Untuk menghapus kolom
accountNumber
dari Customers
Buat seed untuk mengisi Customers minimal 2 data
Buatlah routing untuk system Bank yang HARUS mengikuti format ketentuan sebagai berikut:
Method | Route | Description |
---|---|---|
GET | /customers |
Menampilkan data Customers |
GET & POST | /customers/register |
Form untuk menambahkan data Customer |
GET & POST | /customers/:idCustomer/editProfile |
Mengupdate data profile Customer |
GET & POST | /customers/:idCustomer/accounts |
Menampilkan semua data Account yang dibuka oleh Customer tersebut dan Form untuk menambah Account |
GET & POST | /customers/:idCustomer/accounts/:idAccount/transfer |
Menampilkan form untuk transfer ke Account lain |
Pada routing /customers
akan menampilkan list Customers
pada sebuah Bank
. diurutkan berdasarkan abjad nama Customers
secara berurutan. Dimana terdapat link pada setiap data untuk Edit Profile & View Accounts
Dihalaman ini juga terdapat link/button untuk menuju halaman registrasi
Pada routing /customers/register
akan menampilkan halaman untuk registrasi Customer
dimana:
- input type
identityNumber
adalah text - input type
fullName
adalah text - input type
address
adalah text - input type
birthDate
adalah picker date, dimana jika picker date tidak diisi maka default Value dari birthDate ini adalah 1 Januari 2000 - input type
gender
adalah radio dengan value:- female
- male
Pada routing /customers/:idCustomer/editProfile
halaman untuk edit profile Customers
dimana semua datanya ter-populate sebagai value di masing-masing input-nya.
Pada routing /customers/:idCustomer/accounts
akan menampilkan menampilkan semua Accounts
yang dimiliki oleh seorang Customer
Pada halaman ini buatlah form untuk menambahkan Account
dimana terdapat:
- input type
account type
adalah select option yang berisi pilihanOn Account
,Xtra Payroll
danTabunganku
- input type
balance
adalah input text
Value dari accountNumber
akan teriisi secara otomatis dan random sebanyak 10 digit. (Dilarang meng-assign value dari routes/controller. Coba kamu pikirkan apakah harus menggunakan instance method/class method/hooks/helper)
Buat validation sesuai keterangan berikut:
-
Customer
identityNumber
harus diisi; minimum karakter 16 digit maksimum 20 digit; dan harus unik- Tampilkan pesan Identity Number must be filled jika
identityNumber
kosong - Tampilkan pesan Identity Number minimum 16 characters and maximum 20 characters jika
identityNumber
kurang dari 16 digit - Tampilkan pesan Duplicate Identity Number (buat custom validation)
- Tampilkan pesan Identity Number must be filled jika
fullName
harus diisi- Tampilkan pesan Full name must be filled jika
fullName
kosong
- Tampilkan pesan Full name must be filled jika
birthDate
harus diisi- Tampilkan pesan Birth Date must be filled jika
birthDate
kosong
- Tampilkan pesan Birth Date must be filled jika
NOTE Pastikan saat melakukan Edit Profile, validation diatas tetap berjalan
-
Account
balance
minimum 500.000- Tampilkan pesan Minimum balance for new Accout: Rp500.000 jika balance kurang dari 500.000
- JIKA
balance
kosong/tidak diisi, maka defaultValue adalah 500.000
Buat fungsi untuk menampilkan value balance
yang tadinya hanya berupa angka menjadi format IDR X,XXX,XXX tanpa mengubah controller/routes dan tanpa memasukkan logic proses pada View.
Gunakan fungsi ini pada halaman/form yang menampilkan value balance
HINT
toLocaleString('en-ID', {style: 'currency', currency: 'IDR'});
Pada routing /customers/:idCustomer/accounts/:idAccount/transfer
akan menampilkan data:
- Transfer From berisi informasi [accountNumber][type][balance-yang-telah-diformat]
- Amount merupakan input text
- Transfer To berupa select option yang berisi daftar
accountNumber
danpemilik accountNumber
Jika button TRANSFER
di-klik, maka proses yang terjadi adalah:
- Jika
balance
kurang dariamount
maka tampilkan Insufficient balance (Proses ini tidak boleh dilakukan di controller, routes dan view. Coba pikirkan apakah harus menggunakan helper atau hooks) - Jika
balance
cukup, makabalance
ybs akan berkurang danbalance
yang dituju akan bertambah