Compare commits
No commits in common. "61f0d29f37cd31ed265f9eaf804ce8a67ac2a5d3" and "5ca05c64909abe29fce2203c80808730049dc03a" have entirely different histories.
61f0d29f37
...
5ca05c6490
@ -46,11 +46,10 @@ interface PersonalTrainerAssign {
|
|||||||
|
|
||||||
export const checkExpiredMemberships = onSchedule(
|
export const checkExpiredMemberships = onSchedule(
|
||||||
{
|
{
|
||||||
schedule: "0 8,14,20 * * *",
|
schedule: "*/5 * * * *",
|
||||||
timeZone: "UTC",
|
timeZone: "UTC",
|
||||||
region: "#{SERVICES_RGN}#",
|
region: "#{SERVICES_RGN}#",
|
||||||
},
|
},
|
||||||
|
|
||||||
async (event) => {
|
async (event) => {
|
||||||
logger.info("Starting scheduled membership expiry check...");
|
logger.info("Starting scheduled membership expiry check...");
|
||||||
|
|
||||||
@ -59,17 +58,10 @@ export const checkExpiredMemberships = onSchedule(
|
|||||||
const expiredMemberships = await findExpiredMemberships();
|
const expiredMemberships = await findExpiredMemberships();
|
||||||
const expiringMemberships = await findMembershipsExpiringIn10Days();
|
const expiringMemberships = await findMembershipsExpiringIn10Days();
|
||||||
|
|
||||||
const expiredMembershipsWithoutExpiryDate =
|
const expiredMembershipsWithoutExpiryDate = await findExpiredMembershipsWithoutExpiryDate();
|
||||||
await findExpiredMembershipsWithoutExpiryDate();
|
|
||||||
|
|
||||||
if (
|
if (expiredMemberships.length === 0 && expiringMemberships.length === 0 && expiredMembershipsWithoutExpiryDate.length === 0) {
|
||||||
expiredMemberships.length === 0 &&
|
logger.info("No expired, expiring, or unprocessed expired memberships found.");
|
||||||
expiringMemberships.length === 0 &&
|
|
||||||
expiredMembershipsWithoutExpiryDate.length === 0
|
|
||||||
) {
|
|
||||||
logger.info(
|
|
||||||
"No expired, expiring, or unprocessed expired memberships found."
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -86,29 +78,15 @@ export const checkExpiredMemberships = onSchedule(
|
|||||||
);
|
);
|
||||||
|
|
||||||
const updateResults = await Promise.allSettled(
|
const updateResults = await Promise.allSettled(
|
||||||
expiredMembershipsWithoutExpiryDate.map((m) =>
|
expiredMembershipsWithoutExpiryDate.map((m) => updateExpiryDateForExpiredMembership(m.id, m.data))
|
||||||
updateExpiryDateForExpiredMembership(m.id, m.data)
|
|
||||||
)
|
|
||||||
);
|
);
|
||||||
|
|
||||||
const expiredSuccessful = expiredResults.filter(
|
const expiredSuccessful = expiredResults.filter(r => r.status === "fulfilled").length;
|
||||||
(r) => r.status === "fulfilled"
|
const expiredFailed = expiredResults.filter(r => r.status === "rejected").length;
|
||||||
).length;
|
const expiringSuccessful = expiringResults.filter(r => r.status === "fulfilled").length;
|
||||||
const expiredFailed = expiredResults.filter(
|
const expiringFailed = expiringResults.filter(r => r.status === "rejected").length;
|
||||||
(r) => r.status === "rejected"
|
const updateSuccessful = updateResults.filter(r => r.status === "fulfilled").length;
|
||||||
).length;
|
const updateFailed = updateResults.filter(r => r.status === "rejected").length;
|
||||||
const expiringSuccessful = expiringResults.filter(
|
|
||||||
(r) => r.status === "fulfilled"
|
|
||||||
).length;
|
|
||||||
const expiringFailed = expiringResults.filter(
|
|
||||||
(r) => r.status === "rejected"
|
|
||||||
).length;
|
|
||||||
const updateSuccessful = updateResults.filter(
|
|
||||||
(r) => r.status === "fulfilled"
|
|
||||||
).length;
|
|
||||||
const updateFailed = updateResults.filter(
|
|
||||||
(r) => r.status === "rejected"
|
|
||||||
).length;
|
|
||||||
|
|
||||||
logger.info(
|
logger.info(
|
||||||
`Completed processing. Expired - Success: ${expiredSuccessful}, Failed: ${expiredFailed}. Expiring - Success: ${expiringSuccessful}, Failed: ${expiringFailed}. Updates - Success: ${updateSuccessful}, Failed: ${updateFailed}`
|
`Completed processing. Expired - Success: ${expiredSuccessful}, Failed: ${expiredFailed}. Expiring - Success: ${expiringSuccessful}, Failed: ${expiringFailed}. Updates - Success: ${updateSuccessful}, Failed: ${updateFailed}`
|
||||||
@ -119,6 +97,9 @@ export const checkExpiredMemberships = onSchedule(
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
||||||
Array<{ id: string; data: MembershipData }>
|
Array<{ id: string; data: MembershipData }>
|
||||||
> {
|
> {
|
||||||
@ -129,10 +110,7 @@ async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
|||||||
.where("status", "==", "EXPIRED")
|
.where("status", "==", "EXPIRED")
|
||||||
.get();
|
.get();
|
||||||
|
|
||||||
const membershipsWithoutExpiryDate: Array<{
|
const membershipsWithoutExpiryDate: Array<{ id: string; data: MembershipData }> = [];
|
||||||
id: string;
|
|
||||||
data: MembershipData;
|
|
||||||
}> = [];
|
|
||||||
|
|
||||||
snapshot.docs.forEach((doc) => {
|
snapshot.docs.forEach((doc) => {
|
||||||
const data = doc.data() as MembershipData;
|
const data = doc.data() as MembershipData;
|
||||||
@ -143,10 +121,7 @@ async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
|||||||
|
|
||||||
return membershipsWithoutExpiryDate;
|
return membershipsWithoutExpiryDate;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(
|
logger.error("Error finding expired memberships without expiry date:", error);
|
||||||
"Error finding expired memberships without expiry date:",
|
|
||||||
error
|
|
||||||
);
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,10 +130,7 @@ async function updateExpiryDateForExpiredMembership(
|
|||||||
membershipData: MembershipData
|
membershipData: MembershipData
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
try {
|
try {
|
||||||
if (
|
if (!membershipData.subscription || !membershipData.subscription.frequency) {
|
||||||
!membershipData.subscription ||
|
|
||||||
!membershipData.subscription.frequency
|
|
||||||
) {
|
|
||||||
logger.warn(`Skipping membership ${membershipId} - no subscription data`);
|
logger.warn(`Skipping membership ${membershipId} - no subscription data`);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -184,14 +156,9 @@ async function updateExpiryDateForExpiredMembership(
|
|||||||
updatedAt: admin.firestore.FieldValue.serverTimestamp(),
|
updatedAt: admin.firestore.FieldValue.serverTimestamp(),
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.info(
|
logger.info(`Updated expiry date for expired membership ${membershipId}: ${expiryDate.toISOString()}`);
|
||||||
`Updated expiry date for expired membership ${membershipId}: ${expiryDate.toISOString()}`
|
|
||||||
);
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
logger.error(
|
logger.error(`Error updating expiry date for membership ${membershipId}:`, error);
|
||||||
`Error updating expiry date for membership ${membershipId}:`,
|
|
||||||
error
|
|
||||||
);
|
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -82,6 +82,15 @@ async function getUserAndFCMToken(
|
|||||||
if (notification.recipientId) {
|
if (notification.recipientId) {
|
||||||
targetUserId = notification.recipientId;
|
targetUserId = notification.recipientId;
|
||||||
logger.info(`Using top-level recipientId: ${targetUserId}`);
|
logger.info(`Using top-level recipientId: ${targetUserId}`);
|
||||||
|
} else if (notification.data?.userId) {
|
||||||
|
targetUserId = notification.data.userId;
|
||||||
|
logger.info(`Using data.userId: ${targetUserId}`);
|
||||||
|
} else if (notification.data?.clientId) {
|
||||||
|
targetUserId = notification.data.clientId;
|
||||||
|
logger.info(`Using data.clientId: ${targetUserId}`);
|
||||||
|
} else if (notification.data?.invitorId) {
|
||||||
|
targetUserId = notification.data.invitorId;
|
||||||
|
logger.info(`Using data.invitorId: ${targetUserId}`);
|
||||||
} else if (notification.data?.phoneNumber) {
|
} else if (notification.data?.phoneNumber) {
|
||||||
logger.info(
|
logger.info(
|
||||||
`Looking up user by phone number from data: ${notification.data.phoneNumber}`
|
`Looking up user by phone number from data: ${notification.data.phoneNumber}`
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user