bayan-api / src /js /sync /sync-resolver.js
youssefreda9's picture
authDone Ready for deployment
a281968
Raw
History Blame Contribute Delete
1.2 kB
// Phase 7: Sync Resolver
// Resolves conflicts between local and server versions of documents
const SyncResolver = {
/**
* Resolves a conflict between a local document draft and the server document.
* Rule: Latest timestamp wins. Fallback: Server wins.
*
* @param {object} localDoc - The local pending change or draft object (needs timestamp)
* @param {object} serverDoc - The document fetched from Supabase (needs updated_at)
* @returns {'local' | 'server'} - Which version won
*/
resolveConflict(localDoc, serverDoc) {
if (!localDoc || !localDoc.content) return 'server';
if (!serverDoc || !serverDoc.content) return 'local';
const localTime = localDoc.timestamp ? new Date(localDoc.timestamp).getTime() : 0;
const serverTime = serverDoc.updated_at ? new Date(serverDoc.updated_at).getTime() : 0;
// If both times are valid, latest wins
if (localTime > 0 && serverTime > 0) {
if (localTime >= serverTime) {
return 'local';
} else {
return 'server';
}
}
// Fallback: Server wins
return 'server';
}
};
if (typeof module !== 'undefined' && module.exports) {
module.exports = { SyncResolver };
}