Proyek keenam menyimulasikan kebutuhan bisnis klasik: mengelola stok barang. Tantangan utamanya adalah integritas — setiap perubahan stok harus tercatat sebagai stock movement dan transaksi inventaris harus atomik. Kita membangunnya di atas SQLite dengan repository, laporan, pencarian, testing menyeluruh, dan penutup deployment.
Fokus utama proyek ini adalah integritas data: pergerakan stok tercatat rapi, transaksi bersifat atomik, dan laporan dapat dipercaya. Kode pada setiap bagian diuji di PHP 8.4 dengan SQLite, dan bagian penutup merangkum seluruhnya ke dalam container siap deploy.
Rancang skema SQLite untuk inventaris: tabel categories, products, dan stock_movements dengan CHECK constraint, foreign key, serta data awal yang konsisten dengan buku besar.
Buka → # Bagian 2: Produk dan KategoriBangun ProductRepository dan CategoryRepository di atas PDO: CRUD dengan prepared statements, query JOIN, dan penanganan SKU unik.
Buka → # Bagian 3: Stock MovementsCatat setiap perubahan stok sebagai stock movement append-only dengan guard anti-stok-negatif, riwayat per produk, dan total per jenis.
Buka → # Bagian 4: Transactions dan ValidationBungkus perubahan stok dan pencatatan movement dalam transaksi PDO lewat InventoryService, lalu tambahkan Validator bergaya error bag untuk data produk.
Buka → # Bagian 5: Laporan dan SearchBaca database inventaris dari sisi manusia: laporan stok menipis, nilai persediaan, pergerakan per periode, dan pencarian LIKE yang aman terhadap wildcard.
Buka → # Bagian 6: TestingGanti demo manual dengan test PHPUnit: database :memory: segar per test, penolakan stok negatif, rollback yang dipaksa gagal lewat trigger, dan pencarian yang ter-escape.
Buka → # Bagian 7: DeploymentKemas sistem inventaris ke dalam image Docker dengan konfigurasi DB_PATH, migrasi schema yang aman diulang, health check, dan rekap kesiapan produksi.
Buka →