Changes Updated
This commit is contained in:
parent
25f77d2fec
commit
559997a16e
@ -57,20 +57,6 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
|
||||||
"collectionGroup": "gyms",
|
|
||||||
"queryScope": "COLLECTION",
|
|
||||||
"fields": [
|
|
||||||
{
|
|
||||||
"fieldPath": "userId",
|
|
||||||
"order": "ASCENDING"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldPath": "name",
|
|
||||||
"order": "ASCENDING"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"collectionGroup": "memberships",
|
"collectionGroup": "memberships",
|
||||||
"queryScope": "COLLECTION",
|
"queryScope": "COLLECTION",
|
||||||
|
|||||||
@ -53,6 +53,8 @@ export const checkExpiredMemberships = onSchedule(
|
|||||||
logger.info("Starting scheduled membership expiry check...");
|
logger.info("Starting scheduled membership expiry check...");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
await updateDaysUntilExpiryForAllMemberships();
|
||||||
const expiredMemberships = await findExpiredMemberships();
|
const expiredMemberships = await findExpiredMemberships();
|
||||||
const expiringMemberships = await findMembershipsExpiringIn10Days();
|
const expiringMemberships = await findMembershipsExpiringIn10Days();
|
||||||
|
|
||||||
@ -377,6 +379,100 @@ function calculateRenewalDateFromPayment(
|
|||||||
return renewalDate;
|
return renewalDate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function updateDaysUntilExpiryForAllMemberships(): Promise<void> {
|
||||||
|
try {
|
||||||
|
logger.info("Starting to update daysUntilExpiry for all active memberships...");
|
||||||
|
|
||||||
|
const snapshot = await app
|
||||||
|
.firestore()
|
||||||
|
.collection("memberships")
|
||||||
|
.where("status", "==", "ACTIVE")
|
||||||
|
.get();
|
||||||
|
|
||||||
|
const batchSize = 10;
|
||||||
|
const docs = snapshot.docs;
|
||||||
|
let updatedCount = 0;
|
||||||
|
|
||||||
|
for (let i = 0; i < docs.length; i += batchSize) {
|
||||||
|
const batch = docs.slice(i, i + batchSize);
|
||||||
|
const batchResults = await Promise.allSettled(
|
||||||
|
batch.map(async (doc) => {
|
||||||
|
const data = doc.data() as MembershipData;
|
||||||
|
const daysUntilExpiry = await calculateDaysUntilExpiry(doc.id, data);
|
||||||
|
|
||||||
|
if (daysUntilExpiry !== null) {
|
||||||
|
await app
|
||||||
|
.firestore()
|
||||||
|
.collection("memberships")
|
||||||
|
.doc(doc.id)
|
||||||
|
.update({
|
||||||
|
daysUntilExpiry: daysUntilExpiry,
|
||||||
|
updatedAt: admin.firestore.FieldValue.serverTimestamp(),
|
||||||
|
});
|
||||||
|
return doc.id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
batchResults.forEach((result) => {
|
||||||
|
if (result.status === "fulfilled" && result.value) {
|
||||||
|
updatedCount++;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
logger.info(`Updated daysUntilExpiry for ${updatedCount} memberships`);
|
||||||
|
} catch (error) {
|
||||||
|
logger.error("Error updating daysUntilExpiry for memberships:", error);
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
async function calculateDaysUntilExpiry(
|
||||||
|
membershipId: string,
|
||||||
|
data: MembershipData
|
||||||
|
): Promise<number | null> {
|
||||||
|
try {
|
||||||
|
if (!data.subscription || !data.subscription.frequency) {
|
||||||
|
logger.warn(
|
||||||
|
`Skipping expiry calculation for membership ${membershipId} with missing subscription data.`
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const payments = await getPaymentsForMembership(membershipId);
|
||||||
|
if (payments.length === 0) {
|
||||||
|
logger.warn(
|
||||||
|
`No payments found for membership ${membershipId}, cannot determine expiry`
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
const latestPayment = payments[0];
|
||||||
|
const startDate = latestPayment.dateTimestamp;
|
||||||
|
|
||||||
|
const expiryDate = calculateExpiryDate(
|
||||||
|
startDate,
|
||||||
|
data.subscription.frequency
|
||||||
|
);
|
||||||
|
|
||||||
|
const now = new Date();
|
||||||
|
const timeDiff = expiryDate.getTime() - now.getTime();
|
||||||
|
const daysUntilExpiry = Math.ceil(timeDiff / (1000 * 3600 * 24));
|
||||||
|
|
||||||
|
return daysUntilExpiry;
|
||||||
|
} catch (error) {
|
||||||
|
logger.error(
|
||||||
|
`Error calculating daysUntilExpiry for membership ${membershipId}:`,
|
||||||
|
error
|
||||||
|
);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
async function getTrainerAssignmentsForMembership(
|
async function getTrainerAssignmentsForMembership(
|
||||||
membershipId: string
|
membershipId: string
|
||||||
): Promise<PersonalTrainerAssign[]> {
|
): Promise<PersonalTrainerAssign[]> {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user