TKK_E32230499/functions/index.js

113 lines
3.4 KiB
JavaScript

const { setGlobalOptions } = require("firebase-functions");
const { onValueCreated } = require("firebase-functions/v2/database");
const admin = require("firebase-admin");
admin.initializeApp();
setGlobalOptions({ maxInstances: 10 });
/// 🔔 1. NOTIFIKASI TRIGGER (MONITORING & SELESAI)
exports.notifHandler = onValueCreated(
"/notifikasi/{id}",
async (event) => {
try {
const data = event.data.val();
if (!data) return null;
const tipe = data.tipe || "";
const jenisTape = data.jenisTape || "Ketan";
const waktu = data.waktu || "-";
const suhu = data.suhu || "-";
const alkohol = data.alkohol || "-";
const status = data.status || "";
const jamTotal = data.jam_total || data.waktu || "-";
/// AMBIL TOKEN
const tokenSnap = await admin.database().ref("fcm_token").once("value");
const token = tokenSnap.val();
if (!token) {
console.log("❌ Token tidak ada");
return null;
}
let message;
if (tipe === "monitoring") {
const delta = data.delta_alkohol !== undefined ? data.delta_alkohol : "-";
message = {
notification: {
title: `📊 Monitoring Tape ${jenisTape}`,
body: `Status: ${status}\nSuhu: ${suhu}°C\nAlkohol: ${alkohol}%\nDelta 3 Jam: ${delta}%`,
},
token: token,
};
} else if (tipe === "selesai") {
message = {
notification: {
title: `🍌 Fermentasi Tape ${jenisTape} Selesai!`,
body: `Waktu: ${waktu}\nTotal Waktu: ${jamTotal} Jam\nSuhu: ${suhu}°C\nAlkohol: ${alkohol}%\nStatus: ${status}`,
},
token: token,
};
} else {
console.log(`⚠️ Tipe notifikasi tidak dikenal: ${tipe}`);
return null;
}
await admin.messaging().send(message);
console.log(`✅ Notif ${tipe} terkirim`);
return null;
} catch (error) {
console.error("❌ Error sending notification:", error);
return null;
}
}
);
/// 🔔 2. PERINGATAN TRIGGER (HANYA TERLALU MATANG)
exports.peringatanHandler = onValueCreated(
"/peringatan/{id}",
async (event) => {
try {
const data = event.data.val();
if (!data) return null;
const status = data.status || "";
const jenisTape = data.jenisTape || "Ketan";
const suhu = data.suhu || "-";
const alkohol = data.alkohol || "-";
const waktu = data.waktu || "-";
// HANYA kirim jika status "Terlalu Matang"
if (status !== "Terlalu Matang") {
console.log(`⚠️ Mengabaikan peringatan dengan status: ${status}`);
return null;
}
/// AMBIL TOKEN
const tokenSnap = await admin.database().ref("fcm_token").once("value");
const token = tokenSnap.val();
if (!token) {
console.log("❌ Token tidak ada");
return null;
}
const message = {
notification: {
title: `⚠️ Peringatan: Tape ${jenisTape} Terlalu Matang!`,
body: `Tape sudah terlalu matang.\nWaktu: ${waktu}\nSuhu: ${suhu}°C\nAlkohol: ${alkohol}%`,
},
token: token,
};
await admin.messaging().send(message);
console.log("✅ Notif peringatan Terlalu Matang terkirim");
return null;
} catch (error) {
console.error("❌ Error sending warning notification:", error);
return null;
}
}
);