From 6d7247325be90ec5593273b8ba56d517266d30e6 Mon Sep 17 00:00:00 2001 From: Benoy Bose Date: Sat, 15 Mar 2025 10:53:40 +0530 Subject: [PATCH] Update index.ts --- functions/src/index.ts | 136 ++++++++++++++++++++--------------------- 1 file changed, 68 insertions(+), 68 deletions(-) diff --git a/functions/src/index.ts b/functions/src/index.ts index 5ae0cb5..be52d5d 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -3,8 +3,8 @@ import { Request } from "firebase-functions/v2/https"; import * as admin from 'firebase-admin'; import * as express from "express"; import * as logger from "firebase-functions/logger"; +import { onDocumentCreated } from "firebase-functions/firestore"; -const functions = require('firebase-functions'); const formData = require('form-data'); const Mailgun = require('mailgun.js'); const { convert } = require('html-to-text'); @@ -56,7 +56,6 @@ export const sendSMS = onRequest((request: Request, response: express.Response) }); }); - interface Invitation { email: string; phoneNumber: string; @@ -64,71 +63,72 @@ interface Invitation { invitedByName: string; } -export const sendInvitationNotification = functions.region('asia-south1').firestore.document('notifications/{notificationId}') - .onCreate(async (event: { data: { data: () => Invitation; }; params: { invitationId: any; }; }) => { - const invitation = event.data?.data() as Invitation; - const invitationId = event.params.invitationId; +export const sendInvitationNotification = onDocumentCreated({ + document: 'notifications/{notificationId}', + region: 'asia-south1' +}, async (event: any) => { + const invitation = event.data?.data() as Invitation; + const invitationId = event.params.invitationId; - if (!invitation) { - console.error('Invitation data is missing.'); - return null; - } - - try { - const userQuery = await admin - .firestore() - .collection('users') - .where('email', '==', invitation.email) - .where('phoneNumber', '==', invitation.phoneNumber) - .limit(1) - .get(); - - if (userQuery.empty) { - console.log( - `User not found for email: ${invitation.email} and phone: ${invitation.phoneNumber}.` - ); - return null; - } - - const user = userQuery.docs[0].data(); - const fcmToken = user.fcmToken; - - if (!fcmToken) { - console.log(`FCM token not found for user: ${invitation.email}.`); - return null; - } - - const message: admin.messaging.Message = { - notification: { - title: 'New Gym Invitation', - body: `${invitation.invitedByName} has invited you to join ${invitation.gymName}`, - }, - data: { - type: 'invitation', - invitationId: invitationId, - gymName: invitation.gymName, - senderName: invitation.invitedByName, - }, - android: { - priority: 'high', - notification: { - channelId: 'invitations_channel', - priority: 'high', - defaultSound: true, - defaultVibrateTimings: true, - icon: '@mipmap/ic_launcher', - clickAction: 'FLUTTER_NOTIFICATION_CLICK', - }, - }, - token: fcmToken, - }; - - await admin.messaging().send(message); - console.log(`Invitation notification sent to ${invitation.email}.`); - return null; - } catch (error) { - console.error('Error sending invitation notification:', error); - return null; - } + if (!invitation) { + console.error('Invitation data is missing.'); + return null; } - ); \ No newline at end of file + + try { + const userQuery = await admin + .firestore() + .collection('users') + .where('email', '==', invitation.email) + .where('phoneNumber', '==', invitation.phoneNumber) + .limit(1) + .get(); + + if (userQuery.empty) { + console.log( + `User not found for email: ${invitation.email} and phone: ${invitation.phoneNumber}.` + ); + return null; + } + + const user = userQuery.docs[0].data(); + const fcmToken = user.fcmToken; + + if (!fcmToken) { + console.log(`FCM token not found for user: ${invitation.email}.`); + return null; + } + + const message: admin.messaging.Message = { + notification: { + title: 'New Gym Invitation', + body: `${invitation.invitedByName} has invited you to join ${invitation.gymName}`, + }, + data: { + type: 'invitation', + invitationId: invitationId, + gymName: invitation.gymName, + senderName: invitation.invitedByName, + }, + android: { + priority: 'high', + notification: { + channelId: 'invitations_channel', + priority: 'high', + defaultSound: true, + defaultVibrateTimings: true, + icon: '@mipmap/ic_launcher', + clickAction: 'FLUTTER_NOTIFICATION_CLICK', + }, + }, + token: fcmToken, + }; + + await admin.messaging().send(message); + console.log(`Invitation notification sent to ${invitation.email}.`); + return null; + } catch (error) { + console.error('Error sending invitation notification:', error); + return null; + } +}); \ No newline at end of file