Skip to content

Commit bc06a37

Browse files
committed
Optimize bulkLoad syncing
1 parent f41dd52 commit bc06a37

File tree

1 file changed

+12
-20
lines changed

1 file changed

+12
-20
lines changed

src/modules/auth.js

Lines changed: 12 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -797,29 +797,21 @@ export async function bulkLoad(fields = [], usr = null, pwd = null, isAdmin = fa
797797
var updatedBulkLoad = {};
798798
for (const table in fetchedBulkLoad) {
799799
if (table === 'asOf' || table === 'syncDeleted') continue;
800-
if (storage.get((isAdmin || isTA) ? "lastAdminBulkLoad" : "lastBulkLoad") || null) {
801-
var deletedData;
802-
var existingData;
803-
var mergedData;
804-
if (!Array.isArray(fetchedBulkLoad[table] || [])) {
805-
updatedBulkLoad[table] = fetchedBulkLoad[table];
806-
continue;
807-
}
808-
deletedData = fetchedBulkLoad.syncDeleted?.[table] || [];
809-
const cacheObj = (await storage.idbGet((isAdmin || isTA) ? "adminCache" : "cache")) || storage.get((isAdmin || isTA) ? "adminCache" : "cache") || {};
810-
existingData = (Array.isArray(cacheObj[table]) ? cacheObj[table] : []).filter(item => {
811-
return !deletedData.includes(String(item.id || item.seatCode || item.period || item.key || item.username || 0));
800+
const currentCacheKey = (isAdmin || isTA) ? "adminCache" : "cache";
801+
const lastBulkLoadKey = (isAdmin || isTA) ? "lastAdminBulkLoad" : "lastBulkLoad";
802+
if (storage.get(lastBulkLoadKey)) {
803+
let deletedData = fetchedBulkLoad.syncDeleted?.[table] || [];
804+
const cacheObj = (await storage.idbGet(currentCacheKey)) || storage.get(currentCacheKey) || {};
805+
const deletedSet = new Set(deletedData.map(item => String(item.id || item.seatCode || item.period || item.key || item.username || 0)));
806+
const existingData = Array.isArray(cacheObj[table]) ? cacheObj[table].filter(item => !deletedSet.has(String(item.id || item.seatCode || item.period || item.key || item.username || 0))) : [];
807+
const mergedMap = {};
808+
existingData.forEach(item => {
809+
mergedMap[String(item.id || item.seatCode || item.period || item.key || item.username || 0)] = item;
812810
});
813-
mergedData = [...existingData];
814811
(fetchedBulkLoad[table] || []).forEach(newItem => {
815-
const index = mergedData.findIndex(item => String(item.id || item.seatCode || item.period || item.key || item.username || 0) === String(newItem.id || newItem.seatCode || newItem.period || newItem.key || newItem.username || 0));
816-
if (index !== -1) {
817-
mergedData[index] = newItem;
818-
} else {
819-
mergedData.push(newItem);
820-
}
812+
mergedMap[String(newItem.id || newItem.seatCode || newItem.period || newItem.key || newItem.username || 0)] = newItem;
821813
});
822-
updatedBulkLoad[table] = mergedData;
814+
updatedBulkLoad[table] = Object.values(mergedMap);
823815
} else {
824816
updatedBulkLoad[table] = fetchedBulkLoad[table];
825817
}

0 commit comments

Comments
 (0)