Files
Fondex-Driver/functions/index.js
2025-12-08 23:25:00 +05:00

68 lines
1.6 KiB
JavaScript

const {onRequest} = require("firebase-functions/v2/https");
const {onDocumentCreated} = require("firebase-functions/v2/firestore");
const admin = require("firebase-admin");
admin.initializeApp();
const db = admin.firestore();
// HTTP test
exports.helloWorld = onRequest((req, res) => {
res.send("Hello from Firebase!");
});
// Trigger on new ride created
exports.onRideCreated = onDocumentCreated("rides/{rideId}", async (event) => {
const ride = event.data.data();
const rideId = event.params.rideId;
console.log("🚕 New ride created:", rideId);
if (ride.driverId) {
console.log("Ride already has driver — skipping.");
return;
}
const driversSnap = await db
.collection("users")
.where("role", "==", "driver")
.where("active", "==", true)
.get();
if (driversSnap.empty) {
console.log("❌ No drivers are active right now.");
return;
}
const messaging = admin.messaging();
let count = 0;
for (const doc of driversSnap.docs) {
const driver = doc.data();
if (!driver.fcmToken) continue;
const message = {
token: driver.fcmToken,
notification: {
title: "New Ride Request",
body:
`${ride.sourceLocationName}` +
`${ride.destinationLocationName}`.slice(0, 80), // max-len safe
},
data: {
rideId,
type: "NEW_RIDE",
},
};
try {
await messaging.send(message);
count++;
} catch (err) {
console.log("FCM Error:", err);
}
}
console.log(`📨 Sent ride request to ${count} drivers.`);
});