fix(backup): VACUUM INTO agar backup konsisten saat DB mode WAL (sebelumnya salin file mentah bisa kehilangan -wal)

This commit is contained in:
oxpoe committed 2026-10-12 23:12:35 +07:00
1 parent ebbfffc116
commit 3eb4edfe5b
1 file changed
+10 -2
+10 -2
View File
@@ -3,6 +3,7 @@
* Melakukan backup otomatis database dan settings * Melakukan backup otomatis database dan settings
*/ */
const fs = require('fs'); const fs = require('fs');
const Database = require('better-sqlite3');
const path = require('path'); const path = require('path');
const { logger } = require('../config/logger'); const { logger } = require('../config/logger');
const { getSetting, getCurrentDateInTimezone, getNowLocalISO } = require('../config/settingsManager'); const { getSetting, getCurrentDateInTimezone, getNowLocalISO } = require('../config/settingsManager');
@@ -41,8 +42,15 @@ function backupDatabase() {
const backupFileName = `billing_db_${timestamp}.db`; const backupFileName = `billing_db_${timestamp}.db`;
const backupFilePath = path.join(backupDir, backupFileName); const backupFilePath = path.join(backupDir, backupFileName);
// Copy database file // VACUUM INTO: snapshot konsisten & aman di mode WAL
fs.copyFileSync(dbPath, backupFilePath); // (menyalin file mentah bisa kehilangan transaksi terbaru yang masih di -wal)
if (fs.existsSync(backupFilePath)) fs.unlinkSync(backupFilePath);
const srcDb = new Database(dbPath, { readonly: true });
try {
srcDb.prepare('VACUUM INTO ?').run(backupFilePath);
} finally {
srcDb.close();
}
// Compress backup (optional - bisa ditambahkan nanti) // Compress backup (optional - bisa ditambahkan nanti)
const stats = fs.statSync(backupFilePath); const stats = fs.statSync(backupFilePath);