notification-bug-fix #113
| @ -46,7 +46,7 @@ interface PersonalTrainerAssign { | |||||||
| 
 | 
 | ||||||
| export const checkExpiredMemberships = onSchedule( | export const checkExpiredMemberships = onSchedule( | ||||||
|   { |   { | ||||||
|     schedule: "*/5 * * * *", |     schedule: "0 0,12 * * *", | ||||||
|     timeZone: "UTC", |     timeZone: "UTC", | ||||||
|     region: "#{SERVICES_RGN}#", |     region: "#{SERVICES_RGN}#", | ||||||
|   }, |   }, | ||||||
| @ -58,10 +58,17 @@ export const checkExpiredMemberships = onSchedule( | |||||||
|       const expiredMemberships = await findExpiredMemberships(); |       const expiredMemberships = await findExpiredMemberships(); | ||||||
|       const expiringMemberships = await findMembershipsExpiringIn10Days(); |       const expiringMemberships = await findMembershipsExpiringIn10Days(); | ||||||
| 
 | 
 | ||||||
|       const expiredMembershipsWithoutExpiryDate = await findExpiredMembershipsWithoutExpiryDate(); |       const expiredMembershipsWithoutExpiryDate = | ||||||
|  |         await findExpiredMembershipsWithoutExpiryDate(); | ||||||
| 
 | 
 | ||||||
|       if (expiredMemberships.length === 0 && expiringMemberships.length === 0 && expiredMembershipsWithoutExpiryDate.length === 0) { |       if ( | ||||||
|         logger.info("No expired, expiring, or unprocessed expired memberships found."); |         expiredMemberships.length === 0 && | ||||||
|  |         expiringMemberships.length === 0 && | ||||||
|  |         expiredMembershipsWithoutExpiryDate.length === 0 | ||||||
|  |       ) { | ||||||
|  |         logger.info( | ||||||
|  |           "No expired, expiring, or unprocessed expired memberships found." | ||||||
|  |         ); | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
| 
 | 
 | ||||||
| @ -78,15 +85,29 @@ export const checkExpiredMemberships = onSchedule( | |||||||
|       ); |       ); | ||||||
| 
 | 
 | ||||||
|       const updateResults = await Promise.allSettled( |       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 expiredSuccessful = expiredResults.filter( | ||||||
|       const expiredFailed = expiredResults.filter(r => r.status === "rejected").length; |         (r) => r.status === "fulfilled" | ||||||
|       const expiringSuccessful = expiringResults.filter(r => r.status === "fulfilled").length; |       ).length; | ||||||
|       const expiringFailed = expiringResults.filter(r => r.status === "rejected").length; |       const expiredFailed = expiredResults.filter( | ||||||
|       const updateSuccessful = updateResults.filter(r => r.status === "fulfilled").length; |         (r) => r.status === "rejected" | ||||||
|       const updateFailed = updateResults.filter(r => r.status === "rejected").length; |       ).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}` | ||||||
| @ -97,9 +118,6 @@ export const checkExpiredMemberships = onSchedule( | |||||||
|   } |   } | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| async function findExpiredMembershipsWithoutExpiryDate(): Promise< | async function findExpiredMembershipsWithoutExpiryDate(): Promise< | ||||||
|   Array<{ id: string; data: MembershipData }> |   Array<{ id: string; data: MembershipData }> | ||||||
| > { | > { | ||||||
| @ -110,7 +128,10 @@ async function findExpiredMembershipsWithoutExpiryDate(): Promise< | |||||||
|       .where("status", "==", "EXPIRED") |       .where("status", "==", "EXPIRED") | ||||||
|       .get(); |       .get(); | ||||||
| 
 | 
 | ||||||
|     const membershipsWithoutExpiryDate: Array<{ id: string; data: MembershipData }> = []; |     const membershipsWithoutExpiryDate: Array<{ | ||||||
|  |       id: string; | ||||||
|  |       data: MembershipData; | ||||||
|  |     }> = []; | ||||||
| 
 | 
 | ||||||
|     snapshot.docs.forEach((doc) => { |     snapshot.docs.forEach((doc) => { | ||||||
|       const data = doc.data() as MembershipData; |       const data = doc.data() as MembershipData; | ||||||
| @ -121,7 +142,10 @@ async function findExpiredMembershipsWithoutExpiryDate(): Promise< | |||||||
| 
 | 
 | ||||||
|     return membershipsWithoutExpiryDate; |     return membershipsWithoutExpiryDate; | ||||||
|   } catch (error) { |   } catch (error) { | ||||||
|     logger.error("Error finding expired memberships without expiry date:", error); |     logger.error( | ||||||
|  |       "Error finding expired memberships without expiry date:", | ||||||
|  |       error | ||||||
|  |     ); | ||||||
|     throw error; |     throw error; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @ -130,7 +154,10 @@ async function updateExpiryDateForExpiredMembership( | |||||||
|   membershipData: MembershipData |   membershipData: MembershipData | ||||||
| ): Promise<void> { | ): Promise<void> { | ||||||
|   try { |   try { | ||||||
|     if (!membershipData.subscription || !membershipData.subscription.frequency) { |     if ( | ||||||
|  |       !membershipData.subscription || | ||||||
|  |       !membershipData.subscription.frequency | ||||||
|  |     ) { | ||||||
|       logger.warn(`Skipping membership ${membershipId} - no subscription data`); |       logger.warn(`Skipping membership ${membershipId} - no subscription data`); | ||||||
|       return; |       return; | ||||||
|     } |     } | ||||||
| @ -156,9 +183,14 @@ async function updateExpiryDateForExpiredMembership( | |||||||
|         updatedAt: admin.firestore.FieldValue.serverTimestamp(), |         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) { |   } catch (error) { | ||||||
|     logger.error(`Error updating expiry date for membership ${membershipId}:`, error); |     logger.error( | ||||||
|  |       `Error updating expiry date for membership ${membershipId}:`, | ||||||
|  |       error | ||||||
|  |     ); | ||||||
|     throw error; |     throw error; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user