Update index.ts
This commit is contained in:
parent
c8a52d2b1c
commit
6d7247325b
@ -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;
|
||||||
|
}
|
||||||
|
});
|
||||||
Loading…
Reference in New Issue
Block a user