Skip to content

Commit f15aa6a

Browse files
committed
optimize code: utilize scopes instead of variable reset
1 parent f15f86a commit f15aa6a

File tree

1 file changed

+29
-28
lines changed

1 file changed

+29
-28
lines changed

src/sync.ts

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,11 @@ export const syncWithIntra = async function(): Promise<void> {
7575
* @returns A promise that resolves when the synchronization is complete
7676
*/
7777
async 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
*/
9998
async 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
*/
146148
async 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
*/
211212
async 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

Comments
 (0)