Compare commits
6 Commits
5ca05c6490
...
61f0d29f37
| Author | SHA1 | Date | |
|---|---|---|---|
| 61f0d29f37 | |||
| 209c7c65b0 | |||
| ad31bc8e80 | |||
| f0d167a671 | |||
| e762d0fb79 | |||
| 7ec65e4ab1 |
@ -46,10 +46,11 @@ interface PersonalTrainerAssign {
|
||||
|
||||
export const checkExpiredMemberships = onSchedule(
|
||||
{
|
||||
schedule: "*/5 * * * *",
|
||||
schedule: "0 8,14,20 * * *",
|
||||
timeZone: "UTC",
|
||||
region: "#{SERVICES_RGN}#",
|
||||
},
|
||||
|
||||
async (event) => {
|
||||
logger.info("Starting scheduled membership expiry check...");
|
||||
|
||||
@ -57,11 +58,18 @@ export const checkExpiredMemberships = onSchedule(
|
||||
await updateDaysUntilExpiryForAllMemberships();
|
||||
const expiredMemberships = await findExpiredMemberships();
|
||||
const expiringMemberships = await findMembershipsExpiringIn10Days();
|
||||
|
||||
const expiredMembershipsWithoutExpiryDate = await findExpiredMembershipsWithoutExpiryDate();
|
||||
|
||||
if (expiredMemberships.length === 0 && expiringMemberships.length === 0 && expiredMembershipsWithoutExpiryDate.length === 0) {
|
||||
logger.info("No expired, expiring, or unprocessed expired memberships found.");
|
||||
const expiredMembershipsWithoutExpiryDate =
|
||||
await findExpiredMembershipsWithoutExpiryDate();
|
||||
|
||||
if (
|
||||
expiredMemberships.length === 0 &&
|
||||
expiringMemberships.length === 0 &&
|
||||
expiredMembershipsWithoutExpiryDate.length === 0
|
||||
) {
|
||||
logger.info(
|
||||
"No expired, expiring, or unprocessed expired memberships found."
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -78,15 +86,29 @@ export const checkExpiredMemberships = onSchedule(
|
||||
);
|
||||
|
||||
const updateResults = await Promise.allSettled(
|
||||
expiredMembershipsWithoutExpiryDate.map((m) => updateExpiryDateForExpiredMembership(m.id, m.data))
|
||||
expiredMembershipsWithoutExpiryDate.map((m) =>
|
||||
updateExpiryDateForExpiredMembership(m.id, m.data)
|
||||
)
|
||||
);
|
||||
|
||||
const expiredSuccessful = expiredResults.filter(r => r.status === "fulfilled").length;
|
||||
const expiredFailed = expiredResults.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;
|
||||
const expiredSuccessful = expiredResults.filter(
|
||||
(r) => r.status === "fulfilled"
|
||||
).length;
|
||||
const expiredFailed = expiredResults.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(
|
||||
`Completed processing. Expired - Success: ${expiredSuccessful}, Failed: ${expiredFailed}. Expiring - Success: ${expiringSuccessful}, Failed: ${expiringFailed}. Updates - Success: ${updateSuccessful}, Failed: ${updateFailed}`
|
||||
@ -97,9 +119,6 @@ export const checkExpiredMemberships = onSchedule(
|
||||
}
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
||||
Array<{ id: string; data: MembershipData }>
|
||||
> {
|
||||
@ -110,7 +129,10 @@ async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
||||
.where("status", "==", "EXPIRED")
|
||||
.get();
|
||||
|
||||
const membershipsWithoutExpiryDate: Array<{ id: string; data: MembershipData }> = [];
|
||||
const membershipsWithoutExpiryDate: Array<{
|
||||
id: string;
|
||||
data: MembershipData;
|
||||
}> = [];
|
||||
|
||||
snapshot.docs.forEach((doc) => {
|
||||
const data = doc.data() as MembershipData;
|
||||
@ -121,7 +143,10 @@ async function findExpiredMembershipsWithoutExpiryDate(): Promise<
|
||||
|
||||
return membershipsWithoutExpiryDate;
|
||||
} catch (error) {
|
||||
logger.error("Error finding expired memberships without expiry date:", error);
|
||||
logger.error(
|
||||
"Error finding expired memberships without expiry date:",
|
||||
error
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@ -130,7 +155,10 @@ async function updateExpiryDateForExpiredMembership(
|
||||
membershipData: MembershipData
|
||||
): Promise<void> {
|
||||
try {
|
||||
if (!membershipData.subscription || !membershipData.subscription.frequency) {
|
||||
if (
|
||||
!membershipData.subscription ||
|
||||
!membershipData.subscription.frequency
|
||||
) {
|
||||
logger.warn(`Skipping membership ${membershipId} - no subscription data`);
|
||||
return;
|
||||
}
|
||||
@ -156,9 +184,14 @@ async function updateExpiryDateForExpiredMembership(
|
||||
updatedAt: admin.firestore.FieldValue.serverTimestamp(),
|
||||
});
|
||||
|
||||
logger.info(`Updated expiry date for expired membership ${membershipId}: ${expiryDate.toISOString()}`);
|
||||
logger.info(
|
||||
`Updated expiry date for expired membership ${membershipId}: ${expiryDate.toISOString()}`
|
||||
);
|
||||
} catch (error) {
|
||||
logger.error(`Error updating expiry date for membership ${membershipId}:`, error);
|
||||
logger.error(
|
||||
`Error updating expiry date for membership ${membershipId}:`,
|
||||
error
|
||||
);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
@ -1034,4 +1067,4 @@ async function getGymName(gymId: string): Promise<string> {
|
||||
logger.error(`Error getting gym name for gym ${gymId}:`, error);
|
||||
return "Unknown Gym";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,15 +82,6 @@ async function getUserAndFCMToken(
|
||||
if (notification.recipientId) {
|
||||
targetUserId = notification.recipientId;
|
||||
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) {
|
||||
logger.info(
|
||||
`Looking up user by phone number from data: ${notification.data.phoneNumber}`
|
||||
|
||||
Loading…
Reference in New Issue
Block a user