Subscription Contract Engine
Manual B2B Provisioning & Idempotent Contract Lifecycle
Provisioning langganan berbasis kontrak formal B2B dengan Idempotency Key, masa berlaku otomatis, dan fitur tersemat (embedded entitlements) pada dokumen MongoDB.
Diagram Alur Data & Arsitektur Sistem
Visual InteraktifAlur Data Provisioning Kontrak B2B & Idempotensi
Dari penandatanganan kesepakatan B2B hingga pembaruan state di MongoDB & Redis
Admin Portal
Input Kontrak & Key
Redis Key Guard
Check Idempotency
NestJS Service
Contract State Machine
MongoDB Property
Embedded Sub-Doc
Activity Log
Audit Trail Store
Problem & Latar Belakang Kebutuhan
Pada segmen hospitality B2B, pelanggan hotel dan apartemen tidak menggunakan sistem checkout kartu kredit retail otomatis. Setiap properti menandatangani kontrak kerja sama resmi (PKS) dengan kuota kamar dan paket siaran khusus. Sistem membutuhkan aktivasi manual oleh Admin IPTV dengan jaminan idempotensi agar tidak terjadi duplikasi kontrak saat koneksi jaringan operator mengalami timeout.
Implementasi Rekayasa Backend NestJS
Admin atau Superadmin menginput data kontrak dan properti via portal internal dengan menyertakan header Idempotency-Key. NestJS memvalidasi key di Redis, lalu menyematkan sub-dokumen subscription (startsAt, expiresAt, status, planCode, features) langsung ke dalam dokumen Property di MongoDB. Pola embedded document ini menghasilkan zero-join read saat perangkat STB properti melakukan pengecekan hak siar.
Aspek Model Database MongoDB
Dokumen properti menyimpan embedded snapshot subscription aktif: { planCode: 'PLATINUM', contractNumber: 'PKS-2026-042', status: 'ACTIVE', startsAt: ISODate, expiresAt: ISODate, features: ['welcome_video', 'amenities', 'package_all'] }. Kueri hak akses selesai dalam satu operasi findOne tanpa lookup antar-tabel.
Keamanan, Idempotensi & Kepatuhan SLA
Validasi token Idempotency-Key di-cache selama 24 jam di Redis. Request berulang dengan key yang sama akan mengembalikan salinan respons awal tanpa mengeksekusi mutasi ulang ke MongoDB.
// NestJS Controller: Manual Provisioning with Idempotency Key
@Post('properties/:id/contracts')
@Roles('superadmin', 'admin')
@UseGuards(JwtAuthGuard, RolesGuard)
async provisionContract(
@Param('id') propertyId: string,
@Headers('Idempotency-Key') idempotencyKey: string,
@Body() dto: ProvisionContractDto,
) {
// 1. Cek idempotency key di Redis
const cachedResponse = await this.redis.get(`idemp:${idempotencyKey}`);
if (cachedResponse) {
return JSON.parse(cachedResponse);
}
// 2. Eksekusi mutasi kontrak ke dokumen Property MongoDB
const result = await this.subscriptionService.provisionContract(propertyId, dto);
// 3. Simpan hasil di Redis untuk idempotency caching (24 jam)
await this.redis.set(`idemp:${idempotencyKey}`, JSON.stringify(result), 'EX', 86400);
return result;
}Live Simulator & Execution Sandbox
RolesGuard verified caller is 'admin'. Idempotency Key verified in Redis. MongoDB document updated.
Contract for 'Grand Horizon Hotel & Resort' persisted into Property document with 1-Year validity.
Provisioned 1-Year Platinum Contract #PKS-2026-042 via manual B2B order.
Updated welcome video banner and personalized TV dining directory.
Eksplorasi Fitur Terkait Lainnya
Lihat Semua Fitur →Multi-Tier Scoped RBAC
Hirarki 4 peran (Superadmin, Admin, Manager, Frontdesk) dengan pembatasan domain (scoping) ketat untuk mencegah kebocoran data antar-penyewa properti.
Property Content Management
Pengelolaan materi tayangan hotel (video sambutan kamar, menu amenities digital, banner promo) yang divalidasi dinamis terhadap paket kontrak aktif.
Automated Activity Audit Trail
Pencatatan riwayat audit append-only di koleksi MongoDB activity_logs untuk seluruh aksi administratif, mutasi kontrak, dan perubahan konten.
STB Device Pairing & Room Ops
Otomasi check-in & check-out tamu: pairing perangkat STB, personalisasi nama sambutan TV saat check-in, dan reset sesi privasi secara real-time saat check-out.
Redis Entitlements Cache Layer
Caching status langganan dan hak akses properti di memory Redis untuk validasi izin super cepat (<1ms) pada request STB berfrekuensi tinggi.