From a27ac55ccfdf05deafa0e15469620a5a3f263b2e Mon Sep 17 00:00:00 2001 From: zkldi <20380519+zkldi@users.noreply.github.com> Date: Sun, 17 Apr 2022 04:59:07 +0100 Subject: [PATCH] fix: unsubscribe users if milestone gets deleted --- server/src/lib/targets/milestones.ts | 21 ++++++++++++++++----- server/src/scripts/sync-database.ts | 3 ++- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server/src/lib/targets/milestones.ts b/server/src/lib/targets/milestones.ts index 9ff26dcb2..10a31c98a 100644 --- a/server/src/lib/targets/milestones.ts +++ b/server/src/lib/targets/milestones.ts @@ -243,10 +243,10 @@ export async function SubscribeToMilestone( return { milestoneSub, goals: result.goals, goalResults: result.goalResults }; } -export async function UnsubscribeFromMilestone(userID: integer, milestone: MilestoneDocument) { +export async function UnsubscribeFromMilestone(userID: integer, milestoneID: string) { await db["milestone-subs"].remove({ userID, - milestoneID: milestone.milestoneID, + milestoneID, }); } @@ -264,8 +264,19 @@ export async function UpdateMilestoneSubscriptions(milestoneID: string) { const subscriptions = await db["milestone-subs"].find({ milestoneID }); - const milestone = await GetMilestoneForIDGuaranteed(milestoneID); - const goals = await GetGoalsInMilestone(milestone); + const maybeMilestone = await db.milestones.findOne({ milestoneID }); + + if (!maybeMilestone) { + logger.info( + `Milestone ${milestoneID} has been deleted. Unsubscribing ${subscriptions.length} users.` + ); + + return Promise.all( + subscriptions.map((e) => UnsubscribeFromMilestone(e.userID, e.milestoneID)) + ); + } + + const goals = await GetGoalsInMilestone(maybeMilestone); const goalSubscriptionPromises = []; @@ -287,7 +298,7 @@ export async function UpdateMilestoneSubscriptions(milestoneID: string) { if (newStuff !== 0) { logger.info( - `Updating subscriptions for '${milestone.name}' resulted in ${newStuff} updates.` + `Updating subscriptions for '${maybeMilestone.name}' resulted in ${newStuff} updates.` ); } diff --git a/server/src/scripts/sync-database.ts b/server/src/scripts/sync-database.ts index 10290e4b6..4dad09ef6 100644 --- a/server/src/scripts/sync-database.ts +++ b/server/src/scripts/sync-database.ts @@ -291,7 +291,8 @@ const syncInstructions: SyncInstructions[] = [ milestones.filter((e) => IsSupported(e.game)), collection, "milestoneID", - logger + logger, + true ); if (r.thingsChanged) {