diff --git a/functions/src/notifications/membershipStatusNotifications.ts b/functions/src/notifications/membershipStatusNotifications.ts index 7dd0541..8d25206 100644 --- a/functions/src/notifications/membershipStatusNotifications.ts +++ b/functions/src/notifications/membershipStatusNotifications.ts @@ -406,14 +406,12 @@ async function getTrainerName(trainerId: string): Promise { .collection("trainer_profiles") .doc(trainerId) .get(); - if (!doc.exists) { const userDoc = await app .firestore() .collection("users") .doc(trainerId) .get(); - if (userDoc.exists) { const userData = userDoc.data(); return userData?.name || userData?.displayName || "Unknown Trainer"; @@ -428,7 +426,6 @@ async function getTrainerName(trainerId: string): Promise { const lastName = fields["last-name"] || ""; return `${firstName} ${lastName}`.trim() || "Unknown Trainer"; } - return data?.name || data?.displayName || "Unknown Trainer"; } catch (error) { logger.error(`Error getting trainer name for ${trainerId}:`, error); @@ -447,9 +444,9 @@ async function processExpiredMembership( }); logger.info(`Marked membership ${membershipId} as EXPIRED`); - + await sendPlanExpiredNotification(membershipId, membershipData); - + await sendTrainerNotifications(membershipId, membershipData, "expired"); } catch (error) { logger.error(`Error processing membership ${membershipId}:`, error); @@ -462,9 +459,9 @@ async function processExpiringMembership( ): Promise { try { logger.info(`Processing expiring membership ${membershipId}`); - + await sendPlanExpiringNotification(membershipId, membershipData); - + await sendTrainerNotifications(membershipId, membershipData, "expiring"); } catch (error) { logger.error( @@ -474,16 +471,44 @@ async function processExpiringMembership( } } +async function getTrainerUserId(trainerId: string): Promise { + try { + const trainerDoc = await app + .firestore() + .collection("trainer_profiles") + .doc(trainerId) + .get(); + + if (!trainerDoc.exists) { + throw new Error(`Trainer profile not found for ID: ${trainerId}`); + } + + const trainerData = trainerDoc.data(); + if (!trainerData?.userId) { + throw new Error(`userId not found in trainer profile: ${trainerId}`); + } + + return trainerData.userId; + } catch (error) { + logger.error(`Error getting userId for trainer ${trainerId}:`, error); + return trainerId; + } +} + async function sendTrainerNotifications( membershipId: string, membershipData: MembershipData, notificationType: "expired" | "expiring" ): Promise { try { - const trainerAssignments = await getTrainerAssignmentsForMembership(membershipId); - + const trainerAssignments = await getTrainerAssignmentsForMembership( + membershipId + ); + if (trainerAssignments.length === 0) { - logger.info(`No trainer assignments found for membership ${membershipId}`); + logger.info( + `No trainer assignments found for membership ${membershipId}` + ); return; } @@ -519,13 +544,17 @@ async function sendTrainerNotifications( try { const trainerName = await getTrainerName(assignment.trainerId); - - const notifType = notificationType === "expired" ? "trainer_client_plan_expired" : "trainer_client_plan_expiring"; + const trainerUserId = await getTrainerUserId(assignment.trainerId); + + const notifType = + notificationType === "expired" + ? "trainer_client_plan_expired" + : "trainer_client_plan_expiring"; const existing = await app .firestore() .collection("notifications") .where("type", "==", notifType) - .where("recipientId", "==", assignment.trainerId) + .where("recipientId", "==", trainerUserId) .where("data.membershipId", "==", membershipId) .where( "data.expiryDate", @@ -546,7 +575,7 @@ async function sendTrainerNotifications( const notificationData: any = { senderId: "system", - recipientId: assignment.trainerId, + recipientId: trainerUserId, type: notifType, notificationSent: false, timestamp: admin.firestore.FieldValue.serverTimestamp(), @@ -799,4 +828,4 @@ async function getGymName(gymId: string): Promise { logger.error(`Error getting gym name for gym ${gymId}:`, error); return "Unknown Gym"; } -} \ No newline at end of file +}