Skip to content

Commit 83b83ec

Browse files
author
Noah Mattos Oudejans
committed
full sync runs on same timestamp to prevent mismatched synchronisation
1 parent 036a18e commit 83b83ec

1 file changed

Lines changed: 12 additions & 17 deletions

File tree

src/sync.ts

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,11 @@ export const syncWithIntra = async function(): Promise<void> {
5353
// - last successful sync timestamp (lastSync)
5454
// - active campuses
5555
// - 42 and piscine cursus (cursus/21,9)
56-
await syncCampuses(fast42Api);
57-
await syncCursusProjects(fast42Api, '9');
58-
await syncCursusProjects(fast42Api, '21');
59-
await syncUsers(fast42Api);
60-
await syncProjectUsers(fast42Api);
56+
await syncCampuses(fast42Api, now);
57+
await syncCursusProjects(fast42Api, '9', now);
58+
await syncCursusProjects(fast42Api, '21', now);
59+
await syncUsers(fast42Api, now);
60+
await syncProjectUsers(fast42Api, now);
6161
await DatabaseService.saveSyncTimestamp("full", 1, now);
6262

6363
console.info(`Intra synchronization completed at ${new Date().toISOString()}.`);
@@ -74,12 +74,10 @@ export const syncWithIntra = async function(): Promise<void> {
7474
* @param lastPullDate The date of the last synchronization
7575
* @returns A promise that resolves when the synchronization is complete
7676
*/
77-
async function syncCampuses(fast42Api: Fast42): Promise<void> {
77+
async function syncCampuses(fast42Api: Fast42, lastSync: Date | undefined): Promise<void> {
7878
let campusesApi;
7979
try {
8080
log(2, `Syncing campuses...`);
81-
let lastSyncRaw = await DatabaseService.getLastSyncTimestamp("full", 1);
82-
let lastSync: Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw;
8381
campusesApi = await syncData(fast42Api, new Date(), lastSync, `/campus`, { 'active': 'true' });
8482
const dbCampuses = campusesApi.map(transformApiCampusToDb);
8583
await DatabaseService.insertManyCampuses(dbCampuses);
@@ -96,7 +94,7 @@ async function syncCampuses(fast42Api: Fast42): Promise<void> {
9694
* @param lastPullDate The date of the last synchronization
9795
* @returns A promise that resolves when the synchronization is complete
9896
*/
99-
async function syncCursusProjects(fast42Api: Fast42, cursus: string): Promise<void> {
97+
async function syncCursusProjects(fast42Api: Fast42, cursus: string, syncDate: Date): Promise<void> {
10098
let pageIndex = 0;
10199
let hasMorePages = true;
102100
let params: { [key: string]: string } = { 'page[size]': '100' };
@@ -109,11 +107,10 @@ async function syncCursusProjects(fast42Api: Fast42, cursus: string): Promise<vo
109107
params['page[number]'] = pageIndex.toString();
110108
let lastSyncRaw = await DatabaseService.getLastSyncTimestamp("cursus_projects", parseInt(cursus));
111109
let lastSync: Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw;
112-
let syncDate = new Date();
113110
if (lastSync) {
114111
params['range[updated_at]'] = `${lastSync.toISOString()},${syncDate.toISOString()}`;
115112
} else {
116-
delete params['range[updated_at]'];
113+
params['range[updated_at]'] = `${new Date(0).toISOString()},${syncDate.toISOString()}`;
117114
}
118115

119116
log(2, `Fetching page ${pageIndex} of projects...`);
@@ -142,7 +139,7 @@ async function syncCursusProjects(fast42Api: Fast42, cursus: string): Promise<vo
142139
* @param fast42Api The Fast42 API instance to use for fetching user data
143140
* @param lastPullDate The date of the last synchronization
144141
*/
145-
async function syncUsers(fast42Api: Fast42): Promise<void> {
142+
async function syncUsers(fast42Api: Fast42, syncDate: Date): Promise<void> {
146143
let pageIndex = 0;
147144
let hasMorePages = true;
148145
let params: { [key: string]: string } = {};
@@ -161,11 +158,10 @@ async function syncUsers(fast42Api: Fast42): Promise<void> {
161158
params['page[number]'] = pageIndex.toString();
162159
let lastSyncRaw = await DatabaseService.getLastSyncTimestamp("campus_users", campusId);
163160
let lastSync: Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw;
164-
let syncDate = new Date();
165161
if (lastSync) {
166162
params['range[updated_at]'] = `${lastSync.toISOString()},${syncDate.toISOString()}`;
167163
} else {
168-
delete params['range[updated_at]'];
164+
params['range[updated_at]'] = `${new Date(0).toISOString()},${syncDate.toISOString()}`;
169165
}
170166

171167
log(2, `Fetching page ${pageIndex} of users for campus ${campusId} (${index + 1}/${totalCampuses})...`);
@@ -206,7 +202,7 @@ async function syncUsers(fast42Api: Fast42): Promise<void> {
206202
* @param lastPullDate The date of the last synchronization
207203
* @returns A promise that resolves when the synchronization is complete
208204
*/
209-
async function syncProjectUsers(fast42Api: Fast42): Promise<void> {
205+
async function syncProjectUsers(fast42Api: Fast42, syncDate: Date): Promise<void> {
210206
let pageIndex = 0;
211207
let hasMorePages = true;
212208
let params: { [key: string]: string } = {};
@@ -225,11 +221,10 @@ async function syncProjectUsers(fast42Api: Fast42): Promise<void> {
225221
params['page[number]'] = pageIndex.toString();
226222
let lastSyncRaw = await DatabaseService.getLastSyncTimestamp("projects_projects_users", projectId);
227223
let lastSync: Date | undefined = lastSyncRaw === null ? undefined : lastSyncRaw;
228-
let syncDate = new Date();
229224
if (lastSync) {
230225
params['range[updated_at]'] = `${lastSync.toISOString()},${syncDate.toISOString()}`;
231226
} else {
232-
delete params['range[updated_at]'];
227+
params['range[updated_at]'] = `${new Date(0).toISOString()},${syncDate.toISOString()}`;
233228
}
234229

235230
log(2, `Fetching page ${pageIndex} of projectUsers for project ${projectId} (${index + 1}/${totalProjects})...`);

0 commit comments

Comments
 (0)