TKK_E32231242/cleanup_data.js

102 lines
3.8 KiB
JavaScript

const { initializeApp } = require('./node_modules/firebase/app');
const { getDatabase, ref, get, remove, set } = require('./node_modules/firebase/database');
const sqlite3 = require('./backend/node_modules/sqlite3').verbose();
const path = require('path');
const firebaseConfig = {
apiKey: "AIzaSyDhFtqvaTMgYH9vyAHFclDUXiOxkl-2GqM",
authDomain: "silat-b3100.firebaseapp.com",
databaseURL: "https://silat-b3100-default-rtdb.firebaseio.com/",
projectId: "silat-b3100",
storageBucket: "silat-b3100.firebasestorage.app",
messagingSenderId: "471266034969",
appId: "1:471266034969:web:467de19582cf2fd3da3188"
};
const app = initializeApp(firebaseConfig);
const rtdb = getDatabase(app);
const todayStart = 1778691600000; // 14/05/2026 00:00:00 UTC+7
const galihIds = ['026AB155', '23B29603'];
async function cleanupFirebase() {
console.log("--- CLEANING FIREBASE ---");
try {
const usersSnap = await get(ref(rtdb, 'users'));
const users = usersSnap.val() || {};
const activeUserIds = Object.keys(users);
const nodes = ['test_history', 'attempts'];
for (const node of nodes) {
console.log(`Checking node: ${node}`);
const nodeSnap = await get(ref(rtdb, node));
const data = nodeSnap.val() || {};
for (const id in data) {
const isGalih = galihIds.includes(id);
const isOrphan = !activeUserIds.includes(id);
if (isGalih || isOrphan) {
console.log(`Processing ID: ${id} (${isGalih ? 'Galih' : 'Orphan'})`);
const sessions = data[id];
for (const sessionKey in sessions) {
let sessionTs = 0;
if (sessionKey.startsWith('session_')) {
sessionTs = parseInt(sessionKey.replace('session_', ''));
} else if (sessions[sessionKey].timestamp) {
sessionTs = sessions[sessionKey].timestamp;
}
// Jika timestamp di bawah hari ini, hapus
if (sessionTs < todayStart) {
console.log(` Deleting old session: ${sessionKey} (TS: ${sessionTs})`);
await remove(ref(rtdb, `${node}/${id}/${sessionKey}`));
} else {
console.log(` KEEPING today's session: ${sessionKey} (TS: ${sessionTs})`);
}
}
}
}
}
console.log("Firebase cleanup done.");
} catch (err) {
console.error("Firebase Error:", err);
}
}
function cleanupSQLite() {
console.log("\n--- CLEANING SQLITE ---");
const dbPath = path.resolve(__dirname, 'backend', 'silat_monitor.db');
const db = new sqlite3.Database(dbPath);
db.serialize(() => {
// Hapus atlet yang tidak ada di list user baru (yang TEST- ID nya tidak valid lagi)
// Dan hapus attempts lama
// Cari ID atlet yang namanya Fani/Ferdi yang lama
db.run("DELETE FROM attempts WHERE timestamp < datetime(1778691600/1000, 'unixepoch')", (err) => {
if (err) console.error("Error deleting old attempts:", err);
else console.log("Deleted old attempts in SQLite.");
});
// Hapus atlet yang RFID nya diawali TEST- (Data simulasi lama)
db.run("DELETE FROM athletes WHERE rfid_tag LIKE 'TEST-%'", (err) => {
if (err) console.error("Error deleting old athletes:", err);
else console.log("Deleted old athletes (TEST-) in SQLite.");
});
});
db.close();
}
async function main() {
await cleanupFirebase();
cleanupSQLite();
console.log("\n✅ ALL CLEANUP TASKS COMPLETED.");
process.exit();
}
main();