Membuat Simple Bank REST API dengan Golang, Postgres, dan Docker #1

Tampilan dbdiagram io
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.

Tampilan dbdiagram io

Tampilan 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.

dbdiagram io users

dbdiagram io users

  • `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.

dbdiagram io accounts

dbdiagram io 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.

dbdiagram io entries

dbdiagram io 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

dbdiagram ui transfers

dbdiagram ui 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.

index pada tabel users

index pada tabel users

6. Menambahkan index pada tabel accounts

Pada tabel accounts, akan ada keperluan untuk melakukan pencarian data akun berdasarkan user_id nya saja.

index pada tabel accounts

index pada tabel accounts

7. Menambahkan index pada tabel entries

Pada tabel entries, akan ada keperluan untuk melakukan pencarian data entry berdasarkan account_id.

index pada tabel entries

index pada tabel entries

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.

index pd tabel transfers

index pd tabel transfers

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.

export to postgresql

export to postgresql

Klik `Export to PostgresSQL` untuk export desain database kita menjadi perintah postgresSQL. Jika berhasil di-export, akan dihasilkan query sql  seperti ini:

Query sql

Query sql

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