Materi pada Section Database dan SQL telah memperkenalkan koneksi, cursor, parameterized query, dan transaction satu per satu. Pada proyek ini kita menyatukan seluruh materi tersebut menjadi satu aplikasi yang utuh: aplikasi inventaris toko berbasis terminal dengan penyimpanan permanen di database SQLite. Selesainya proyek ini ditandai bukan oleh “programnya jalan”, melainkan oleh lulusnya rangkaian test otomatis yang membuktikan data tetap konsisten.
Yang Akan Kita Bangun #
Aplikasi ini mengelola satu tabel utama bernama produk dengan lima kolom: id, nama, kategori, harga, dan stok. Dari tabel tersebut kita membangun fitur berikut:
- Operasi CRUD lengkap: tambah, lihat, ubah harga, sesuaikan stok, dan hapus produk.
- Riwayat penyesuaian stok yang tercatat otomatis di tabel
riwayat. - Validasi masukan yang menolak nama kosong, harga negatif, dan stok negatif.
- Transaksi atomik: penyesuaian stok yang gagal tidak boleh meninggalkan data setengah jadi.
- Pencarian nama dengan
LIKEyang aman terhadap karakter%dan_. - Laporan: stok menipis, nilai inventaris per kategori, dan daftar produk bernilai terbesar.
Semua interaksi berjalan lewat menu bernomor di terminal, dan seluruh data tersimpan pada satu berkas inventaris.db yang dibuat otomatis saat pertama kali dijalankan.
Prasyarat #
Sebelum mulai, pastikan Anda telah memahami materi berikut:
- Database dan SQL: SQLite dengan Python, Koneksi dan Cursor, Parameterized Queries, CRUD dengan SQLite, dan Transactions.
- Modules dan Packages: Membuat Module Sendiri dan Main Module dan
__name__, karena proyek ini dipecah menjadi dua module. - Exception Handling: try dan except serta Merancang Error Handling, terutama untuk Bagian 4.
- File Handling: Context Manager dan
with, yang dipakai untuk mengelola commit dan rollback. - Testing dan Code Quality: Menulis Test dengan pytest, Fixtures, Parametrized Tests, dan Testing Exceptions untuk Bagian 6.
Tidak ada package pihak ketiga yang dibutuhkan; module sqlite3 sudah tersedia di pustaka standar Python. Seluruh kode pada proyek ini diuji dengan Python 3.12 dan SQLite 3.53.
Struktur Proyek #
Kita menulis kode secara bertahap, tetapi struktur akhirnya hanya berupa empat berkas dalam satu folder:
aplikasi-inventaris/
├── schema.sql # struktur tabel, index, dan data awal
├── database.py # lapisan akses data (SQL hidup di sini)
├── main.py # antarmuka pengguna berbasis menu
└── test_database.py # test otomatis (ditambahkan di Bagian 6)Pemisahan database.py dan main.py adalah keputusan arsitektur yang disengaja: perubahan cara penyimpanan data tidak boleh memaksa kita menulis ulang tampilan, dan sebaliknya. Berkas inventaris.db tidak perlu dibuat manual; aplikasi yang menyiapkannya sendiri pada saat dijalankan.
Peta Bagian #
| Bagian | Fokus |
|---|---|
| Bagian 1: Desain Database | Skema tabel produk dan riwayat, constraint, index, data awal |
| Bagian 2: Koneksi dan Inisialisasi | Module database.py, function koneksi(), inisialisasi idempoten, kerangka menu |
| Bagian 3: Operasi CRUD | INSERT, SELECT, UPDATE, DELETE dengan parameterized query |
| Bagian 4: Validasi dan Transaksi | Validasi masukan, penanganan IntegrityError, transaksi sesuaikan_stok() |
| Bagian 5: Pencarian dan Laporan | Pencarian LIKE dengan escape, filter kategori, laporan agregat |
| Bagian 6: Testing dan Finalisasi | Refactor lapisan data agar testable, test pytest dengan database :memory: |
Setiap bagian menghasilkan program yang benar-benar dapat dijalankan, sehingga Anda boleh berhenti di titik mana pun dan tetap memiliki aplikasi yang bekerja. Mari kita mulai dari fondasinya: desain database.
Rancang skema database inventaris: tabel produk dan riwayat, constraint, index, serta data awal.
Buka → # Bagian 2: Koneksi dan InisialisasiBangun lapisan koneksi database yang aman dijalankan berulang dan kerangka menu aplikasi.
Buka → # Bagian 3: Operasi CRUDImplementasikan operasi CRUD lengkap dengan parameterized query dan tampilan tabel rapi.
Buka → # Bagian 4: Validasi dan TransaksiTambahkan validasi masukan, penanganan nama duplikat, dan transaksi penyesuaian stok yang atomik.
Buka → # Bagian 5: Pencarian dan LaporanTambahkan pencarian LIKE dengan escape, filter kategori, dan tiga laporan inventaris terformat.
Buka → # Bagian 6: Testing dan FinalisasiRefactor lapisan data agar mudah diuji, lalu verifikasi seluruh fitur dengan pytest.
Buka →