@@ -6,10 +6,10 @@ import DocumentSnapshot = firestore.DocumentSnapshot;
66import { getAllSpaceIds } from "./space-utils" ;
77import { resolvedEventFirestorePath , resolvedEventsFirestorePath } from "../../../../../../shared/utilities/event-utils" ;
88import { AllInOneTalkStats } from "../../../../../../shared/event-stats" ;
9- import { getEventTalks } from "./talk-utils" ;
109import { detailedTalksToSpeakersLineup } from "../../../models/Event" ;
1110import { DetailedTalk } from "../../../../../../shared/daily-schedule.firestore" ;
1211import { toValidFirebaseKey } from "../../../../../../shared/utilities/firebase.utils" ;
12+ import { arrayDiff } from "../../../../../../shared/utilities/arrays.utils" ;
1313
1414
1515export 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