@@ -90,21 +90,27 @@ async function generateAndSaveData(changedSpeaker?) {
9090 }
9191 }
9292
93- saveGeneratedData ( generatedData . sessions , 'generatedSessions' ) ;
94- saveGeneratedData ( generatedData . speakers , 'generatedSpeakers' ) ;
95- saveGeneratedData ( generatedData . schedule , 'generatedSchedule' ) ;
93+ await saveGeneratedData ( generatedData . sessions , 'generatedSessions' ) ;
94+ await saveGeneratedData ( generatedData . speakers , 'generatedSpeakers' ) ;
95+ await saveGeneratedData ( generatedData . schedule , 'generatedSchedule' ) ;
9696}
9797
98- function saveGeneratedData ( data : SessionMap | SpeakerMap | ScheduleMap , collectionName : string ) {
98+ async function saveGeneratedData ( data : SessionMap | SpeakerMap | ScheduleMap , collectionName : string ) {
9999 if ( isEmpty ( data ) ) {
100100 functions . logger . error (
101101 `Attempting to write empty data to Firestore collection: "${ collectionName } ".` ,
102102 ) ;
103103 return ;
104104 }
105105
106- for ( let index = 0 ; index < Object . keys ( data ) . length ; index ++ ) {
107- const key = Object . keys ( data ) [ index ] ;
108- getFirestore ( ) . collection ( collectionName ) . doc ( key ) . set ( data [ key ] ) ;
106+ const keys = Object . keys ( data ) ;
107+ const batchSize = 500 ;
108+ for ( let i = 0 ; i < keys . length ; i += batchSize ) {
109+ const batch = getFirestore ( ) . batch ( ) ;
110+ const chunk = keys . slice ( i , i + batchSize ) ;
111+ for ( const key of chunk ) {
112+ batch . set ( getFirestore ( ) . collection ( collectionName ) . doc ( key ) , data [ key ] ) ;
113+ }
114+ await batch . commit ( ) ;
109115 }
110116}
0 commit comments