@@ -75,12 +75,11 @@ export const syncWithIntra = async function(): Promise<void> {
7575 * @returns A promise that resolves when the synchronization is complete
7676 */
7777async function syncCampuses ( fast42Api : Fast42 , now : Date ) : Promise < void > {
78- let campusesApi ;
7978 try {
8079 let lastSyncRaw = await DatabaseService . getLastSyncTimestamp ( "full" , 1 ) ;
8180 let lastSync : Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw ;
8281 log ( 2 , `Syncing campuses...` ) ;
83- campusesApi = await syncData ( fast42Api , now , lastSync , `/campus` , { 'active' : 'true' } ) ;
82+ const campusesApi = await syncData ( fast42Api , now , lastSync , `/campus` , { 'active' : 'true' } ) ;
8483 const dbCampuses = campusesApi . map ( transformApiCampusToDb ) ;
8584 await DatabaseService . insertManyCampuses ( dbCampuses ) ;
8685 log ( 2 , `Finished syncing campuses` ) ;
@@ -97,11 +96,12 @@ async function syncCampuses(fast42Api: Fast42, now: Date): Promise<void> {
9796 * @returns A promise that resolves when the synchronization is complete
9897 */
9998async function syncCursusProjects ( fast42Api : Fast42 , cursus : string , syncDate : Date ) : Promise < void > {
100- let pageIndex = 0 ;
101- let hasMorePages = true ;
102- let params : { [ key : string ] : string } = { 'page[size]' : '100' } ;
103-
10499 try {
100+ let pageIndex = 0 ;
101+ let hasMorePages = true ;
102+ let params : { [ key : string ] : string } = { } ;
103+ params [ 'page[size]' ] = '100' ;
104+
105105 // Set up filters to be used for all pages
106106 const lastSyncRaw = await DatabaseService . getLastSyncTimestamp ( "cursus_projects" , parseInt ( cursus ) ) ;
107107 const lastSync : Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw ;
@@ -123,14 +123,16 @@ async function syncCursusProjects(fast42Api: Fast42, cursus: string, syncDate: D
123123 if ( ! projectsData || projectsData . length === 0 ) {
124124 log ( 2 , `No more projects found on page ${ pageIndex } . Stopping.` ) ;
125125 hasMorePages = false ;
126- await DatabaseService . saveSyncTimestamp ( "cursus_projects" , parseInt ( cursus ) , syncDate ) ;
127126 break ;
128127 }
129128
130129 log ( 2 , `Processing page ${ pageIndex } with ${ projectsData . length } projects...` ) ;
131130 const dbProjects = projectsData . map ( transformApiProjectToDb ) ;
132131 await DatabaseService . insertManyProjects ( dbProjects ) ;
133132 }
133+
134+ // Update last sync timestamp
135+ await DatabaseService . saveSyncTimestamp ( "cursus_projects" , parseInt ( cursus ) , syncDate ) ;
134136 } catch ( error ) {
135137 console . error ( `Failed to sync projects for cursus ${ cursus } ` , error ) ;
136138 throw error ;
@@ -144,16 +146,15 @@ async function syncCursusProjects(fast42Api: Fast42, cursus: string, syncDate: D
144146 * @param lastPullDate The date of the last synchronization
145147 */
146148async function syncUsers ( fast42Api : Fast42 , syncDate : Date ) : Promise < void > {
147- let pageIndex = 0 ;
148- let hasMorePages = true ;
149- let params : { [ key : string ] : string } = { } ;
150- params [ 'page[size]' ] = '100' ;
151-
152- const campuses = await DatabaseService . getAllCampuses ( ) ;
153- let campusIds = campuses . map ( c => c . id ) ;
149+ const campusIds = await DatabaseService . getAllCampuses ( ) . then ( campuses => campuses . map ( c => c . id ) ) ;
154150 try {
155151 const totalCampuses = campusIds . length ;
156152 for ( let [ index , campusId ] of campusIds . entries ( ) ) {
153+ let pageIndex = 0 ;
154+ let hasMorePages = true ;
155+ let params : { [ key : string ] : string } = { } ;
156+ params [ 'page[size]' ] = '100' ;
157+
157158 // Set up filters to be used for all pages
158159 params [ 'filter[primary_campus_id]' ] = campusId . toString ( ) ;
159160 const lastSyncRaw = await DatabaseService . getLastSyncTimestamp ( "campus_users" , campusId ) ;
@@ -183,7 +184,6 @@ async function syncUsers(fast42Api: Fast42, syncDate: Date): Promise<void> {
183184 if ( ! usersData || usersData . length === 0 ) {
184185 log ( 2 , `No more users found for campus ${ campusId } on page ${ pageIndex } . Stopping.` ) ;
185186 hasMorePages = false ;
186- await DatabaseService . saveSyncTimestamp ( "campus_users" , campusId , syncDate ) ;
187187 break ;
188188 }
189189
@@ -192,8 +192,9 @@ async function syncUsers(fast42Api: Fast42, syncDate: Date): Promise<void> {
192192 await DatabaseService . insertManyUsers ( dbUsers ) ;
193193 // No try-catch block here, needs to fail if users fail to sync, otherwise projectsusers cannot be connected to user ids
194194 }
195- pageIndex = 0 ;
196- hasMorePages = true ;
195+
196+ // Update last sync timestamp
197+ await DatabaseService . saveSyncTimestamp ( "campus_users" , campusId , syncDate ) ;
197198 }
198199 } catch ( error ) {
199200 console . error ( `Failed to sync users` , error ) ;
@@ -209,17 +210,17 @@ async function syncUsers(fast42Api: Fast42, syncDate: Date): Promise<void> {
209210 * @returns A promise that resolves when the synchronization is complete
210211 */
211212async function syncProjectUsers ( fast42Api : Fast42 , syncDate : Date ) : Promise < void > {
212- let pageIndex = 0 ;
213- let hasMorePages = true ;
214- let params : { [ key : string ] : string } = { } ;
215- params [ 'page[size]' ] = '100' ;
216- params [ 'filter[campus]' ] = await DatabaseService . getAllCampuses ( ) . then ( campuses => campuses . map ( c => c . id ) . join ( ',' ) ) ;
217-
218- const projects = await DatabaseService . getAllProjects ( ) ;
219- let projectIds = projects . map ( p => p . id ) ;
213+ const campusIds = await DatabaseService . getAllCampuses ( ) . then ( campuses => campuses . map ( c => c . id ) ) ;
214+ const projectIds = await DatabaseService . getAllProjects ( ) . then ( projects => projects . map ( p => p . id ) ) ;
220215 try {
221216 const totalProjects = projectIds . length ;
222217 for ( let [ index , projectId ] of projectIds . entries ( ) ) {
218+ let pageIndex = 0 ;
219+ let hasMorePages = true ;
220+ let params : { [ key : string ] : string } = { } ;
221+ params [ 'page[size]' ] = '100' ;
222+ params [ 'filter[campus]' ] = campusIds . join ( ',' ) ;
223+
223224 // Set up filters to be used for all pages
224225 const lastSyncRaw = await DatabaseService . getLastSyncTimestamp ( "projects_projects_users" , projectId ) ;
225226 const lastSync : Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw ;
@@ -248,7 +249,6 @@ async function syncProjectUsers(fast42Api: Fast42, syncDate: Date): Promise<void
248249 if ( ! projectUsersData || projectUsersData . length === 0 ) {
249250 log ( 2 , `No more users found for project ${ projectId } on page ${ pageIndex } . Stopping.` ) ;
250251 hasMorePages = false ;
251- await DatabaseService . saveSyncTimestamp ( "projects_projects_users" , projectId , syncDate ) ;
252252 break ;
253253 }
254254
@@ -268,8 +268,9 @@ async function syncProjectUsers(fast42Api: Fast42, syncDate: Date): Promise<void
268268 // Continue syncing other project users even if insertion fails, can always repopulate the database
269269 }
270270 }
271- pageIndex = 0 ;
272- hasMorePages = true ;
271+
272+ // Update last sync timestamp
273+ await DatabaseService . saveSyncTimestamp ( "projects_projects_users" , projectId , syncDate ) ;
273274 }
274275 } catch ( error ) {
275276 console . error ( `Failed to sync project users` , error ) ;
0 commit comments