Skip to content

Commit 5ffd729

Browse files
committed
#74 refactored createAllSpeakers() to delete/create speakers only when needed
1 parent d435cd8 commit 5ffd729

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

cloud/functions/src/functions/firestore/services/event-utils.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import DocumentSnapshot = firestore.DocumentSnapshot;
66
import {getAllSpaceIds} from "./space-utils";
77
import {resolvedEventFirestorePath, resolvedEventsFirestorePath} from "../../../../../../shared/utilities/event-utils";
88
import {AllInOneTalkStats} from "../../../../../../shared/event-stats";
9-
import {getEventTalks} from "./talk-utils";
109
import {detailedTalksToSpeakersLineup} from "../../../models/Event";
1110
import {DetailedTalk} from "../../../../../../shared/daily-schedule.firestore";
1211
import {toValidFirebaseKey} from "../../../../../../shared/utilities/firebase.utils";
12+
import {arrayDiff} from "../../../../../../shared/utilities/arrays.utils";
1313

1414

1515
export async function getAllEventsDocs(opts: { includePrivateSpaces: boolean } = { includePrivateSpaces: false }) {
@@ -57,9 +57,12 @@ export async function createAllSpeakers(eventTalks: DetailedTalk[], maybeSpaceTo
5757
const eventSpeakersColl = db.collection(`${eventRootPath}/speakers`)
5858
const existingSpeakerDocs = await eventSpeakersColl.listDocuments()
5959

60-
// delete all then re-create all
61-
await Promise.all(existingSpeakerDocs.map(speakerDoc => speakerDoc.delete()))
62-
await Promise.all(lineupSpeakers.map(lineupSpeaker => db.doc(`${eventRootPath}/speakers/${toValidFirebaseKey(lineupSpeaker.id)}`).set(lineupSpeaker)))
60+
const speakersDiff = arrayDiff(existingSpeakerDocs, lineupSpeakers, doc => doc.id, sp => sp.id);
61+
await Promise.all([
62+
...speakersDiff.elementsToRemove.map(docToRemove => docToRemove.delete()),
63+
...speakersDiff.elementsToAdd.map(lineupSpeakerToAdd => db.doc(`${eventRootPath}/speakers/${toValidFirebaseKey(lineupSpeakerToAdd.id)}`).set(lineupSpeakerToAdd)),
64+
...speakersDiff.elementsAlreadyPresent.map(async ({ origin: speakerDoc, target: lineupSpeaker }) => speakerDoc.update(lineupSpeaker)),
65+
])
6366

6467
return { createdSpeakers: lineupSpeakers }
6568
}

0 commit comments

Comments
 (0)