Membuat Simple Bank REST API dengan Golang, Postgres, dan Docker #1
ini merupakan series ke-1 dari 5 Penulis: Muhammad Ihsan Syafiul Umam (Mahasiswa S-1 Informatika UII)
Bismillahirrahmanirrahim. Hi, Gengs! Pada kesempatan kali ini, saya akan berbagi pengetahuan tentang cara membuat aplikasi bank sederhana dengan bahasa Golang dan database Postgresql. Aplikasi ini akan kita deploy dengan Docker. Setelah mengikuti tutorial ini, kita akan mencoba mengenali teknologi yang digunakan dalam industri saat ini. Selain itu, teman-teman juga akan menambah portofolio proyek yang menarik dan berguna ketika akan melamar pekerjaan nantinya.
Tentang Aplikasi?
Nah, tutorial ini merupakan series pertama dari beberapa tutorial yang akan datang nantinya. Sebelum memulai pengembangan, kita perlu tahu tentang aplikasi yang akan kita kembangkan. Aplikasi yang kita buat adalah aplikasi bank sederhana. Namun, yang kita buat hanya backend-nya saja, alias kita tidak akan memiliki tampilan untuk ditampilkan ke pengguna. Kita akan membuat aplikasi yang sebenarnya berjalan di belakang layar aplikasi, mulai dari manajemen akun nasabah, mencatat perubahan saldo, dan transaksi transfer.
Di series pertama, kita akan membahas desain database dari aplikasi yang akan kita buat. Kita harus memastikan data disimpan dengan baik dan data dapat mengimplementasi konsep ACID. Tools yang akan kita gunakan untuk mendesain database kali ini adalah dbdiagram.io.
Langkah Desain Basis Data Bank Sederhana
Berikut adalah langkah-langkah desain database bank sederhana:
1. Membuat tabel users.
Sebagaimana aplikasi bank pada umumnya, kita membutuhkan satu tabel untuk mengelola data pribadi pengguna, seperti nama lengkap, NIK, alamat, dan sebagainya. Silakan buka dbdiagram.io dan mari kita buat tabel users-nya.
- `Table` digunakan untuk membuat tabel
- `Users` adalah nama tabel yang kita buat
- `id` adalah primary key dalam table Users,
- `full_name` adalah kolom yang menyimpan nama lengkap nasabah,
- `nik` adalah kolom yang menyimpan nomor induk kependudukan nasabah,
- `email` adalah kolom yang menyimpan email nasabah,
- `phone_number` adalah kolom yang menyimpan nomor ponsel nasabah,
- `address` adalah kolom yang menyimpan alamat rumah nasabah,
- `password` adalah kolom yang menyimpan kata sandi nasabah.
- `created_at` adalah kolom yang menyimpan waktu data nasabah dibuat dengan nilai bawaan now() yaitu waktu saat data user masuk ke tabel,
- `updated_at`adalah kolom yang menyimpan waktu data nasabah diubah
2. Membuat tabel Accounts
Tabel accounts akan berfungsi untuk mengelola akun nasabah yang akan menyimpan jumlah saldo, mata uang, dan id_user yang merujuk ke tabel users. Silakan buka kembali dbdiagram.io dan mari kita lanjut untuk membuat tabel accounts.
- `user_id` adalah kolom yang menyimpan id yang merujuk pada tabel
- `balance` adalah kolom yang menyimpan jumlah saldo di akun nasabah.
- `currency` adalah kolom yang menyimpan mata uang yang digunakan nasabah.
3. Membuat tabel entries
Tabel entries akan berfungsi untuk mencatat perubahan saldo. Pengurangan atau penambahan jumlah saldo akan dicatat disini. Silakan buka dbdiagram.io dan mari kita lanjut membuat tabel entries.
- `account_id` adalah kolom yang menyimpan id yang merujuk ke tabel
- `amount` adalah kolom yang menyimpan seberapa banyak saldo yang berkurang atau bertambah. Nilai dari amount dapat positif atau negatif.
4. Membuat tabel transfers
Tabel transfers digunakan ketika proses transfer saldo antar rekening pengirim ke penerima. Tabel ini akan mencatat akun pengirim, akun penerima, serta besaran nominal yang ditransfer. Silakan buka dbdiagram.io dan mari kita buat tabel transfers
- `from_account_id` adalah kolom untuk menyimpan id akun pengirim yang merujuk pada tabel accounts
- `to_account_id` adalah kolom untuk menyimpan id akun penerima yang merujuk pada tabel accounts
- `amount` adalah kolom untuk menyimpan besaran nominal yang dikirimkan
Tabel yang kita butuhkan dalam aplikasi sudah berhasil kita definisikan. Sekarang kita akan menambahkan index dalam tabel kita. Index berfungsi untuk meningkatkan performa pencarian (baca disini). Silakan buka dbdiagram.io dan mari kita tambahkan index di masing-masing tabel.
5. Menambahkan index pada tabel users
Ke depannya, kita mungkin saja ingin melakukan pencarian data user berdasarkan nama lengkap, email, NIK, atau nomor ponsel sehingga kita akan menambahkan index hanya untuk kolom-kolom tersebut.
6. Menambahkan index pada tabel accounts
Pada tabel accounts, akan ada keperluan untuk melakukan pencarian data akun berdasarkan user_id nya saja.
7. Menambahkan index pada tabel entries
Pada tabel entries, akan ada keperluan untuk melakukan pencarian data entry berdasarkan account_id.
8. Menambahkan index pada tabel transfers
Pada tabel transfers, kita dapat melakukan pencarian berdasarkan from_account_id (pengirim), to_account_id (penerima), atau berdasarkan keduanya sekaligus.
9. Export data ke SQL
Tabel-tabel yang telah kita desain sebelumnya dapat kita konversi dengan mudah ke dalam perintah SQL untuk membuat tabel pada database kita. Silakan buka kembali dbdiagram.io dan perhatikan gambar berikut.
Klik `Export to PostgresSQL` untuk export desain database kita menjadi perintah postgresSQL. Jika berhasil di-export, akan dihasilkan query sql seperti ini:
Eits, mohon maaf ni, Gengs… Tidak terasa obrolan kita sudah sepanjang ini. Karena itu, kita akan lanjutkan di episode selanjutnya ya ✌️
What’s Next?
- Instalasi Docker
- Menjalankan Postgres dengan Docker
- Membuat database dan menghubungkan database ke Dbeaver
Referensi
- https://blog.dot.co.id/database-optimization-1-indexing-649e7837a22a
- https://subreza.medium.com/mengenal-transaksi-database-acid-b1a9c187ad62