45 lines
1.2 KiB
JavaScript
45 lines
1.2 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) {
|
||
|
|
if (!pool || !pageService || !userId) {
|
||
|
|
return { created: 0, skipped: 0, updated: 0 };
|
||
|
|
}
|
||
|
|
|
||
|
|
let inFlight = syncInFlight.get(userId);
|
||
|
|
if (!inFlight) {
|
||
|
|
inFlight = syncGeneratedPagesFromPublicAssets({
|
||
|
|
pool,
|
||
|
|
pageService,
|
||
|
|
assetService,
|
||
|
|
userId,
|
||
|
|
publishDir: h5Root ? resolvePublishDir(h5Root, { id: userId }) : null,
|
||
|
|
syncWorkspaceAssets,
|
||
|
|
})
|
||
|
|
.catch((error) => {
|
||
|
|
logger.warn?.('[MindSpace] page sync failed:', error?.message ?? error);
|
||
|
|
return { created: 0, skipped: 0, updated: 0 };
|
||
|
|
})
|
||
|
|
.finally(() => {
|
||
|
|
if (syncInFlight.get(userId) === inFlight) {
|
||
|
|
syncInFlight.delete(userId);
|
||
|
|
}
|
||
|
|
});
|
||
|
|
syncInFlight.set(userId, inFlight);
|
||
|
|
}
|
||
|
|
return inFlight;
|
||
|
|
}
|
||
|
|
|
||
|
|
return { syncUserGeneratedPages };
|
||
|
|
}
|