Automated Activity Audit Trail
Append-Only Compliance & Administrative Mutation Event Store
Pencatatan riwayat audit append-only di koleksi MongoDB activity_logs untuk seluruh aksi administratif, mutasi kontrak, dan perubahan konten.
Diagram Alur Data & Arsitektur Sistem
Visual InteraktifArsitektur Interceptor Audit Trail Otomatis
Perekaman peristiwa mutasi secara asinkron tanpa membebani latensi response
Admin / Manager
Mutasi State API
NestJS Route
Controller Handler
Activity Interceptor
Tap Operator (Async)
MongoDB activity_logs
Append-Only Collection
Audit Dashboard
Live Telemetry Feed
Problem & Latar Belakang Kebutuhan
Dalam kontrak B2B bernilai tinggi, transparansi operasional menjadi syarat mutlak dalam SLA. Operator IPTV harus memiliki bukti forensik digital lengkap jika terjadi insiden (misalnya: siapa yang menonaktifkan saluran tertentu, kapan durasi kontrak diperpanjang, atau akun mana yang mengganti video sambutan kamar).
Implementasi Rekayasa Backend NestJS
NestJS memanfaatkan ActivityLogInterceptor yang membungkus endpoint mutasi (POST, PUT, DELETE, PATCH). Setiap kali controller selesai mengeksekusi request, interceptor secara asinkron menyimpan log peristiwa lengkap ke koleksi activity_logs di MongoDB tanpa memperlambat response time ke klien.
Aspek Model Database MongoDB
Koleksi activity_logs diindeks berdasarkan { propertyId: 1, createdAt: -1 } dan { userId: 1, createdAt: -1 }. Dokumen log bersifat immutable dan dipaginate secara efisien.
Keamanan, Idempotensi & Kepatuhan SLA
Mencatat IP address, user agent, route path, userId, userRole, dan status hasil eksekusi untuk audit trail kepatuhan SOC2 / ISO 27001.
// ActivityLogInterceptor: Pencatatan Mutasi Asinkron
@Injectable()
export class ActivityLogInterceptor implements NestInterceptor {
constructor(@InjectModel(ActivityLog.name) private logModel: Model<ActivityLog>) {}
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
const req = context.switchToHttp().getRequest();
const startTime = Date.now();
return next.handle().pipe(
tap({
next: async () => {
await this.logModel.create({
userId: req.user?._id,
userName: req.user?.fullName,
userRole: req.user?.role,
propertyId: req.params.propertyId || req.body.propertyId || null,
action: `${req.method} ${req.route?.path || req.url}`,
executionTimeMs: Date.now() - startTime,
status: 'SUCCESS',
ipAddress: req.ip,
createdAt: new Date(),
});
},
}),
);
}
}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 →Subscription Contract Engine
Provisioning langganan berbasis kontrak formal B2B dengan Idempotency Key, masa berlaku otomatis, dan fitur tersemat (embedded entitlements) pada dokumen MongoDB.
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.
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.