Pengelolaan kos melibatkan sejumlah data yang saling berkaitan, mulai dari kamar dan penghuni hingga periode sewa serta pembayaran. Hubungan tersebut menjadi studi kasus dalam Kos Management API, final project peserta Bootcamp NodeJS Backend.
Melalui proyek ini, peserta membangun RESTful API untuk mengelola administrasi kos menggunakan Node.js, Express.js, MySQL, dan Sequelize. Sebagai penyelenggara, kami melihat proyek ini sebagai kesempatan untuk menerapkan materi backend pada kebutuhan yang konkret: menyusun model data, memproses permintaan, membangun autentikasi, dan menghubungkan informasi antarentitas.
Studi Kasus: Pengelolaan Kamar, Penghuni, dan Sewa
Proyek berfokus pada empat bagian utama administrasi kos, yaitu kamar, penghuni, penyewaan, dan pembayaran.
Data kamar mencakup nomor kamar, harga, fasilitas, serta status ketersediaan. Data penghuni menyimpan informasi identitas dan kontak, berikut hubungan dengan kamar yang ditempati. Sementara itu, catatan sewa menghubungkan penghuni dan kamar dengan tanggal mulai, tanggal berakhir, harga, serta status penyewaan.
Pembayaran dicatat berdasarkan penghuni, periode, nominal, tanggal pembayaran, dan status lunas atau belum lunas. Struktur ini menyediakan dasar untuk menelusuri catatan pembayaran melalui API. Implementasinya berupa pencatatan pembayaran, belum mencakup integrasi payment gateway.
Apa yang Dikerjakan Peserta?
Peserta mengembangkan endpoint untuk registrasi dan login, serta operasi penambahan, pembacaan, pembaruan, dan penghapusan data pada empat modul utama.
Pada pengelolaan kamar, API menyediakan daftar kamar dan detail berdasarkan ID. Saat menampilkan daftar, controller membaca hubungan kamar dengan penghuni untuk menandai kamar yang memiliki penghuni sebagai tidak tersedia.
Modul penghuni mencakup pengelolaan identitas, kontak, dan penempatan kamar. Peserta juga menambahkan logika pembaruan status kamar ketika penghuni berpindah, meskipun konsistensi nilai statusnya masih membutuhkan penyelarasan.
Pada modul penyewaan, peserta membuat pencatatan hubungan antara penghuni, kamar, dan periode sewa. Modul pembayaran dilengkapi filter berdasarkan status, sehingga permintaan API dapat difokuskan pada catatan berstatus PAID atau UNPAID.
Kode dipisahkan ke dalam routes, controllers, models, middleware, dan konfigurasi database. Pembagian tersebut membantu peserta mengatur tanggung jawab setiap bagian aplikasi.
Teknologi dan Tools yang Digunakan
Node.js menjadi runtime JavaScript di sisi server. Express.js digunakan untuk mendefinisikan endpoint, memproses request JSON, dan menjalankan middleware.
MySQL menyimpan data aplikasi, sedangkan Sequelize digunakan sebagai Object-Relational Mapping untuk mendefinisikan model, relasi, dan operasi database. Melalui Sequelize, peserta menggunakan operasi seperti pembuatan data, pencarian berdasarkan ID, pembaruan, dan penghapusan.
bcryptjs digunakan untuk hashing kata sandi saat registrasi dan pemeriksaan kata sandi saat login. jsonwebtoken menangani penerbitan serta verifikasi JWT, dengan masa berlaku token login satu hari.
Konfigurasi koneksi database dan secret token dibaca dari variabel lingkungan menggunakan dotenv. nodemon juga tercantum sebagai dependensi pengembangan.
Pemodelan Relasi Data
Salah satu bagian pembelajaran dalam proyek ini adalah menentukan hubungan antarentitas.
Model yang disusun memungkinkan satu kamar memiliki beberapa penghuni, sementara setiap penghuni terhubung dengan satu kamar. Catatan penyewaan mengacu pada penghuni dan kamar, sedangkan pembayaran dihubungkan kepada penghuni.
Relasi tersebut memperlihatkan bahwa keputusan pemodelan memengaruhi cara informasi dapat ditelusuri. Sebagai contoh, pembayaran yang terhubung kepada penghuni dapat digunakan untuk mengambil riwayat pembayaran penghuni tersebut. Apabila nantinya dibutuhkan penelusuran pembayaran langsung terhadap kontrak sewa tertentu, hubungan datanya perlu dikembangkan sesuai kebutuhan itu.
Autentikasi dan Pengaturan Akses
Peserta menerapkan registrasi dengan pemeriksaan email yang sudah terdaftar serta hashing kata sandi sebelum penyimpanan. Saat login, sistem memeriksa kecocokan kata sandi dan menerbitkan token.
Endpoint kamar, penghuni, penyewaan, dan pembayaran menggunakan middleware yang memeriksa Bearer token. Permintaan tanpa token atau dengan token tidak valid mendapatkan respons penolakan.
Implementasi ini menjadi latihan autentikasi untuk mengidentifikasi pengguna yang telah login. Walaupun token memuat informasi peran, middleware yang tersedia belum melakukan pemeriksaan hak akses berdasarkan peran. Hal ini memberikan konteks pembelajaran mengenai perbedaan antara verifikasi identitas dan pemberian izin untuk menjalankan tindakan tertentu.
Insight dari Implementasi
Proyek ini menunjukkan pentingnya konsistensi antara model data dan logika controller. Pada alur perpindahan penghuni, controller menggunakan status OCCUPIED, sementara model kamar mendefinisikan AVAILABLE, UNAVAILABLE, dan MAINTENANCE. Penyelarasan nilai tersebut menjadi langkah perbaikan yang konkret.
Perpindahan kamar juga melibatkan beberapa pembaruan sekaligus: status kamar lama, status kamar baru, dan data penghuni. Alur tersebut memberikan bahan pembelajaran tentang penggunaan transaksi database agar perubahan yang saling berkaitan dapat diselesaikan secara konsisten.
Selain itu, pemisahan routes, controllers, dan models membantu memperjelas lokasi perubahan ketika peserta menambah fitur atau menelusuri kesalahan.
Manfaat Pembelajaran
Melalui Kos Management API, peserta berlatih menerjemahkan kebutuhan administrasi menjadi endpoint dan struktur database relasional. Peserta juga memperoleh pengalaman menerapkan autentikasi, mengolah respons JSON, menangani data yang tidak ditemukan, serta menyusun filter pembayaran.
Bagi kami sebagai penyelenggara Bootcamp NodeJS Backend, proyek ini menyediakan hasil kerja yang dapat ditinjau sekaligus bahan pengembangan berikutnya. Fondasi pengelolaan data sudah tersusun, dengan ruang perbaikan pada konsistensi status, validasi masukan, transaksi database, dan otorisasi sesuai kebutuhan aplikasi.