Kita telah menempuh Section Data Modeling, Operasi CRUD, Indexing, dan Aggregation satu per satu. Sekarang saatnya merangkai semuanya menjadi satu sistem yang utuh: aplikasi manajemen inventaris gudang untuk toko perangkat komputer. Proyek ini memosisikan kita sebagai pengembang yang membangun penyimpanan data mulai dari rancangan schema produk, operasi harian gudang, pencarian cepat dengan index, hingga laporan persediaan untuk pemilik toko.

Seluruh kode proyek berbentuk skrip JavaScript yang dijalankan mongosh lewat opsi --file, bukan aplikasi Node.js. Pendekatan ini membuat fokus kita tetap pada perancangan data dan bahasa query — dua inti pekerjaan bersama MongoDB — tanpa perlu kerangka aplikasi tambahan.

Tujuan Proyek #

Setelah menyelesaikan proyek ini, kita memiliki sistem inventaris dengan kemampuan berikut:

  • Schema yang sadar pola akses: pemasok disimpan embedded, riwayat pergerakan stok menjadi array terbatas di dalam document produk.
  • CRUD harian gudang: menambah produk, mencatat transaksi stok masuk/keluar secara atomik, menonaktifkan produk lama, dan menghapus dengan pengaman.
  • Pencarian yang cepat: index unik untuk sku, index compound untuk filter kategori plus rentang harga, dan text index untuk pencarian nama bebas.
  • Laporan siap pakai: nilai persediaan per kategori, daftar produk dengan stok menipis, dan rekap pergerakan stok per bulan — semuanya lewat aggregation pipeline.
  • Suite tes mandiri: seluruh perilaku diverifikasi skrip tes dengan fungsi assertSama() yang berhenti saat ada ketidaksesuaian.

Prasyarat #

Proyek ini memakai materi dari empat Section sebelumnya. Sebelum mulai, pastikan kita sudah memahami:

  • Data Modeling — terutama chapter Embedding vs Referencing dan Document Growth, dasar keputusan schema pada Bagian 1.
  • Operasi CRUD — terutama Update Operators ($set, $inc, $push) serta deleteOne() untuk operasi pada Bagian 2.
  • Indexing — chapter Unique Index, Compound Index, dan Text Index yang dipraktikkan pada Bagian 3.
  • Aggregation — stage $match, $group, dan $unwind yang menjadi bahan laporan pada Bagian 4.

Server yang dipakai adalah replika lingkungan Course: single-node replica set rs0 di 127.0.0.1:27017 yang diakses mongosh dengan connection string mongodb://127.0.0.1:27017/?directConnection=true.

Hasil Akhir #

Proyek selesai dengan satu database inventaris berisi collection produk yang lengkap dengan data contoh, tiga index, dan empat skrip yang dapat dijalankan ulang kapan pun:

BerkasPeran
src/inventaris-seed.jsMereset database dan mengisi 9 produk contoh
src/inventaris-crud.jsFungsi CRUD gudang beserta demo operasinya
src/inventaris-index.jsPembuatan index dan query pencarian
src/inventaris-laporan.jsTiga laporan aggregation persediaan
tests/semua-tes.jsSuite tes mandiri; mencetak SEMUA TES LULUS

Seluruh berkas tersebut dapat diunduh lewat tombol unduhan pada code block di bagian yang membahasnya.

Peta Bagian #

Proyek dikerjakan dalam empat bagian berurutan — setiap bagian dibangun di atas kondisi data bagian sebelumnya:

  1. Bagian 1 — Merancang Document Schema: menetapkan pola akses, memutuskan apa yang di-embed dan apa yang dibatasi, lalu mengisi data awal.
  2. Bagian 2 — Operasi CRUD: menulis empat fungsi inti gudang dan menjalankan skenarionya.
  3. Bagian 3 — Indexing dan Search: membangun tiga index, membuktikan tolakan duplikat, dan membaca rencana query.
  4. Bagian 4 — Laporan Aggregation: menyusun tiga pipeline laporan lalu memverifikasi seluruh proyek dengan suite tes.

Menjalankan Kode Proyek #

Buat folder proyek dengan struktur berikut — setiap berkas diunduh dari bagian yang sesuai:

text
manajemen-inventaris/
├── src/
│   ├── inventaris-seed.js
│   ├── inventaris-crud.js
│   ├── inventaris-index.js
│   └── inventaris-laporan.js
└── tests/
    └── semua-tes.js

Dari folder manajemen-inventaris/, jalankan skrip sesuai urutannya:

bash
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/inventaris-seed.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/inventaris-crud.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/inventaris-index.js
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file src/inventaris-laporan.js

Untuk mengulang dari kondisi awal, cukup jalankan kembali inventaris-seed.js — skrip tersebut mereset seluruh database inventaris sebelum mengisi data. Suite tes dapat dijalankan kapan saja tanpa urutan karena tes menyiapkan datanya sendiri di database terpisah:

bash
mongosh "mongodb://127.0.0.1:27017/?directConnection=true" --file tests/semua-tes.js