Update index.ts

This commit is contained in:
Benoy Bose 2025-03-15 10:53:40 +05:30
parent c8a52d2b1c
commit 6d7247325b

View File

@ -3,8 +3,8 @@ import { Request } from "firebase-functions/v2/https";
import * as admin from 'firebase-admin'; import * as admin from 'firebase-admin';
import * as express from "express"; import * as express from "express";
import * as logger from "firebase-functions/logger"; import * as logger from "firebase-functions/logger";
import { onDocumentCreated } from "firebase-functions/firestore";
const functions = require('firebase-functions');
const formData = require('form-data'); const formData = require('form-data');
const Mailgun = require('mailgun.js'); const Mailgun = require('mailgun.js');
const { convert } = require('html-to-text'); const { convert } = require('html-to-text');
@ -56,7 +56,6 @@ export const sendSMS = onRequest((request: Request, response: express.Response)
}); });
}); });
interface Invitation { interface Invitation {
email: string; email: string;
phoneNumber: string; phoneNumber: string;
@ -64,71 +63,72 @@ interface Invitation {
invitedByName: string; invitedByName: string;
} }
export const sendInvitationNotification = functions.region('asia-south1').firestore.document('notifications/{notificationId}') export const sendInvitationNotification = onDocumentCreated({
.onCreate(async (event: { data: { data: () => Invitation; }; params: { invitationId: any; }; }) => { document: 'notifications/{notificationId}',
const invitation = event.data?.data() as Invitation; region: 'asia-south1'
const invitationId = event.params.invitationId; }, async (event: any) => {
const invitation = event.data?.data() as Invitation;
const invitationId = event.params.invitationId;
if (!invitation) { if (!invitation) {
console.error('Invitation data is missing.'); console.error('Invitation data is missing.');
return null; 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;
}
} }
);
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;
}
});