Setelah membangun REST API untuk tugas, kita beralih ke proyek yang fokus pada pelacakan stok: Aplikasi Inventaris. Aplikasi ini mencatat barang dengan SKU unik, harga, dan jumlah stok. Setiap pergerakan barang dicatat sebagai transaksi masuk atau keluar, lengkap dengan stok sebelum dan sesudah. Database SQLite menyimpan data persisten dan mendukung pencarian berdasarkan nama. Proyek ini melatih keterampilan penting dalam pengembangan aplikasi bisnis: pemodelan entitas dengan SKU, transaksi yang mengubah state, dan laporan agregat. Setiap Bagian menghasilkan program yang dapat dijalankan dan diuji, sehingga invariant seperti “stok tidak negatif” dapat diverifikasi pada setiap iterasi.
Tujuan Proyek #
Aplikasi inventaris yang akan kita bangun mendukung operasi berikut:
- Mendaftarkan Barang dengan SKU, nama, satuan, harga, dan stok awal.
- Mencatat transaksi masuk (stok bertambah) dan keluar (stok berkurang).
- Memvalidasi stok tidak negatif sebelum transaksi keluar.
- Mencari barang berdasarkan SKU atau nama (pencarian
LIKE). - Menampilkan laporan stok: total nilai, stok rendah, dan riwayat transaksi.
Setiap operasi mempertahankan konsistensi: stok tidak boleh negatif, transaksi dicatat dengan stok sebelum dan sesudah, serta SKU unik. Ketika satu langkah gagal, seluruh transaksi dibatalkan agar data tetap koheren.
Perilaku yang Diharapkan #
Contoh sesi pemakaian menampilkan alur transaksi:
java -jar inventaris.jar tambah --sku SKU-001 --nama "Buku Kotlin" --stok 10
java -jar inventaris.jar masuk --sku SKU-001 --jumlah 5
java -jar inventaris.jar cari --nama "Buku"Output yang Dihasilkan:
[SKU-001] Buku Kotlin stok=10
[M0001] +5 SKU-001: 10 -> 15
[SKU-001] Buku Kotlin stok=15Transaksi masuk menghasilkan ID dengan prefix M, transaksi keluar dengan prefix K. Format ID memudahkan pelacakan jenis transaksi tanpa membaca detail. Riwayat transaksi tersimpan lengkap dengan stok sebelum dan sesudah untuk keperluan audit.
Teknologi dan Stack #
Proyek ini menggunakan peranti berikut:
| Komponen | Versi | Tujuan |
|---|---|---|
| Bahasa | Kotlin 2.0.21 | data class, enum, Result<T> |
| Database | SQLite via JDBC | Tanpa server, mudah dipelajari |
| Pencarian | SQL LIKE | Sederhana, didukung SQLite |
| Pengujian | kotlin.test | Standar resmi, ringkas |
| Build tool | Gradle 8.x dengan Kotlin DSL | Plugin application, fat JAR |
| Pola data | Event sourcing ringan | Riwayat transaksi dengan stok sebelum/sesudah |
Proyek ini memperluas penggunaan SQLite dari proyek REST API Manajemen Tugas dengan menambahkan index, pencarian LIKE, dan laporan agregat. Pola yang dipelajari akan relevan untuk proyek backend lain yang melibatkan transaksi keuangan atau logistik.
Prasyarat #
Pembaca diharapkan telah menyelesaikan chapter berikut:
- Section Object-Oriented Programming:
data class,enum class, dancopy(), - Section Error Handling:
Result<T>danrequire(), - Section Strings: Regex untuk validasi SKU,
- Proyek REST API Manajemen Tugas: JDBC, koneksi SQLite, dan eksekusi SQL dari Kotlin.
Tanpa prasyarat tersebut, sebaiknya pelajari dahulu section atau proyek terkait sebelum melanjutkan.
Arsitektur #
Dua entitas inti inventaris adalah Barang dan TransaksiStok. TransaksiStok mencatat stok sebelum dan sesudah, sehingga riwayat transaksi dapat merekonstruksi perubahan stok. Pola ini disebut event sourcing ringan dan berguna untuk audit. Layanan InventarisService menjaga invariant “stok tidak negatif” dan “SKU unik” sebelum menyentuh database.
Lapisan InventarisService memisahkan keputusan bisnis dari penyimpanan. Database hanya menjalankan perintah SQL dari repository, sementara invariant diperiksa di layer layanan. Pemisahan ini membuat pengujian invariant tidak membutuhkan database nyata; cukup dengan repository tiruan di memori.
Struktur Bagian #
Proyek ini dikerjakan dalam empat bagian berurutan:
| Bagian | Yang Dikerjakan | Hasil yang Diharapkan |
|---|---|---|
| 1. Model Barang dan Stok | Barang, TransaksiStok, validasi SKU dan stok awal | Model domain dapat dikonstruksi dan divalidasi tanpa database |
| 2. Transaksi Masuk dan Keluar | Logika stok sebelum/sesudah, prefix ID M/K, atomic update | Transaksi mengubah stok secara konsisten dan tercatat dalam riwayat |
| 3. Database dan Pencarian | JDBC SQLite, skema tabel, index, pencarian LIKE | Data tersimpan persisten; pencarian nama mengembalikan hasil relevan |
| 4. Laporan dan Pengujian | Agregasi SUM, laporan stok rendah, unit test | Laporan menampilkan total nilai inventaris; semua aturan stok teruji |
Mulailah dari Bagian 1 dan ikuti urutannya karena setiap Bagian dibangun di atas Bagian sebelumnya. Setelah Bagian 4 selesai, kita siap melangkah ke proyek Aplikasi Android Pencatat Keuangan yang membawa kita ke platform mobile dengan Jetpack Compose.
Referensi Lanjutan #
- Kotlin documentation home — halaman utama dokumentasi Kotlin sebagai rujukan fitur yang dipakai di proyek inventaris
- Get started with Kotlin — panduan memulai proyek Kotlin sebagai fondasi tiap bagian proyek inventaris
Rancang model Barang, TransaksiStok, dan enum JenisTransaksi dengan validasi SKU dan stok.
Buka → # Bagian 2: Transaksi Masuk dan KeluarImplementasikan logika transaksi masuk (stok bertambah) dan keluar (stok berkurang) dengan validasi stok.
Buka → # Bagian 3: Database dan PencarianTambahkan database SQLite untuk persistensi barang dan pencarian berdasarkan nama menggunakan LIKE.
Buka → # Bagian 4: Laporan dan PengujianHasilkan laporan stok (total nilai, stok rendah) dan tulis unit test yang menjalankan operasi inventaris terhadap database SQLite in-memory.
Buka →