notification-bug-fix #113
| @ -46,7 +46,7 @@ interface PersonalTrainerAssign { | ||||
| 
 | ||||
| export const checkExpiredMemberships = onSchedule( | ||||
|   { | ||||
|     schedule: "*/5 * * * *", | ||||
|     schedule: "0 0 * * *", | ||||
|     timeZone: "UTC", | ||||
|     region: "#{SERVICES_RGN}#", | ||||
|   }, | ||||
| @ -57,11 +57,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 +85,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 +118,6 @@ export const checkExpiredMemberships = onSchedule( | ||||
|   } | ||||
| ); | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| async function findExpiredMembershipsWithoutExpiryDate(): Promise< | ||||
|   Array<{ id: string; data: MembershipData }> | ||||
| > { | ||||
| @ -110,7 +128,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 +142,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 +154,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 +183,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 +1066,4 @@ async function getGymName(gymId: string): Promise<string> { | ||||
|     logger.error(`Error getting gym name for gym ${gymId}:`, error); | ||||
|     return "Unknown Gym"; | ||||
|   } | ||||
| } | ||||
| } | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user