Initial commit
This commit is contained in:
67
functions/index.js
Normal file
67
functions/index.js
Normal file
@@ -0,0 +1,67 @@
|
||||
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.`);
|
||||
});
|
||||
Reference in New Issue
Block a user