UNPKG

@unchainedshop/plugins

Version:

Official plugin collection for the Unchained Engine with payment, delivery, and pricing adapters

66 lines (65 loc) 2.54 kB
import { WorkerDirector, WorkerAdapter } from '@unchainedshop/core'; import { createLogger } from '@unchainedshop/logger'; const logger = createLogger('unchained:bulk-import'); export const BulkImportWorker = { ...WorkerAdapter, key: 'shop.unchained.worker-plugin.bulk-import', label: 'Bulk Import', version: '1.0.0', type: 'BULK_IMPORT', maxParallelAllocations: 1, doWork: async (rawPayload, unchainedAPI) => { try { const { createShouldUpsertIfIDExists = false, skipCacheInvalidation = false, updateShouldUpsertIfIDNotExists = false, } = rawPayload; const bulkImporter = unchainedAPI.bulkImporter.createBulkImporter({ createShouldUpsertIfIDExists, updateShouldUpsertIfIDNotExists, skipCacheInvalidation, }); if (rawPayload.payloadId) { const readStream = await unchainedAPI.services.files.createDownloadStream({ fileId: rawPayload.payloadId, }); if (!readStream) { throw new Error('Could not create download stream from uploaded file'); } await unchainedAPI.bulkImporter.pipeEventStream(readStream, bulkImporter, unchainedAPI); } else { const { events } = rawPayload; if (!events?.length) throw new Error('No events submitted'); await events.reduce(async (currentEventPromise, nextEvent) => { await currentEventPromise; await bulkImporter.validate(nextEvent); return bulkImporter.prepare(nextEvent, unchainedAPI); }, Promise.resolve()); } const [result, error] = await bulkImporter.execute(); await bulkImporter.invalidateCaches(unchainedAPI); if (error) { return { success: false, result: result, error, }; } return { success: true, result: result, }; } catch (err) { logger.error(err); return { success: false, error: { name: err.name, message: err.message, stack: err.stack, }, }; } }, }; WorkerDirector.registerAdapter(BulkImportWorker);