Files
memind/mindspace-page-sync-service.mjs

50 lines
1.4 KiB
JavaScript

import { syncGeneratedPagesFromPublicAssets } from './mindspace-page-sync.mjs';
import { resolvePublishDir } from './user-publish.mjs';
export function createPageSyncService({
pool,
pageService,
assetService,
h5Root,
syncWorkspaceAssets = null,
logger = console,
} = {}) {
const syncInFlight = new Map();
async function syncUserGeneratedPages(userId, { onlyRelativePaths = null } = {}) {
if (!pool || !pageService || !userId) {
return { created: 0, skipped: 0, updated: 0 };
}
const scopeKey = onlyRelativePaths == null
? '*'
: [...new Set(onlyRelativePaths)].sort().join('|');
const inFlightKey = `${userId}:${scopeKey}`;
let inFlight = syncInFlight.get(inFlightKey);
if (!inFlight) {
inFlight = syncGeneratedPagesFromPublicAssets({
pool,
pageService,
assetService,
userId,
publishDir: h5Root ? resolvePublishDir(h5Root, { id: userId }) : null,
syncWorkspaceAssets,
onlyRelativePaths,
})
.catch((error) => {
logger.warn?.('[MindSpace] page sync failed:', error?.message ?? error);
return { created: 0, skipped: 0, updated: 0 };
})
.finally(() => {
if (syncInFlight.get(inFlightKey) === inFlight) {
syncInFlight.delete(inFlightKey);
}
});
syncInFlight.set(inFlightKey, inFlight);
}
return inFlight;
}
return { syncUserGeneratedPages };
}