Saat event Flash Sale dengan trafik tinggi, platform e-commerce menggunakan reservasi stok sementara (TTL = 5 menit). Ketika pengguna memasukkan produk ke keranjang, stok direservasi secara sementara. Jika checkout tidak diselesaikan dalam 5 menit, masa reservasi habis dan stok otomatis dikembalikan ke inventori publik.
POST /orders/reserve
{
"userId": "USER_101",
"itemId": "ITEM_100",
"quantity": 2
}
{
"message": "Stock reserved successfully",
"reservationId": "RES_1721839000000",
"expiresInSeconds": 300
}
const inventory = [
{ itemId: "ITEM_100", totalStock: 10, reservedStock: 0 }
];
const reservations = [];
userId, itemId, dan quantity ($> 0$) wajib diisi → HTTP 400 jika tidak valid.itemId tidak ada di inventory → HTTP 404 "Item not found".availableStock = totalStock - reservedStock. Jika quantity > availableStock → HTTP 400 "Insufficient available inventory".{ reservationId: "RES_" + Date.now(), userId, itemId, quantity, expiresAt: Date.now() + 300000, status: "ACTIVE" }inventory.reservedStock += quantityPelepasan Reservasi Kadaluarsa di Production
Di komentar kode solusi Anda, jelaskan cara otomatis melepas stok reservasi yang kadaluarsa menggunakan:
- Redis Keyspace Notifications (notify-keyspace-events KEA → dengarkan event expired)
- Delayed Job Queue (BullMQ dengan delayed job 5 menit)