102 lines
3.8 KiB
JavaScript
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();
|