UNPKG

@unchainedshop/plugins

Version:

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

91 lines (90 loc) 4.04 kB
import { WorkerAdapter } from '@unchainedshop/core'; export const ZombieKillerWorker = { ...WorkerAdapter, key: 'shop.unchained.worker-plugin.zombie-killer', label: 'Zombie Killer', version: '1.0.0', type: 'ZOMBIE_KILLER', doWork: async ({ bulkImportMaxAgeInDays } = { bulkImportMaxAgeInDays: 5 }, unchainedAPI) => { const { modules, services } = unchainedAPI; try { const error = false; const filters = await modules.filters.findFilters({ includeInactive: true }, { projection: { _id: 1 } }); const filterIds = filters.map((a) => a._id); const deletedFilterTextsCount = await modules.filters.texts.deleteMany({ excludedFilterIds: filterIds, }); const assortments = await modules.assortments.findAssortments({ includeInactive: true, includeLeaves: true, }); const assortmentIds = assortments.map((a) => a._id); const deletedAssortmentTextsCount = await modules.assortments.texts.deleteMany({ excludedAssortmentIds: assortmentIds, }); const deletedAssortmentMediaCount = await modules.assortments.media.deleteMediaFiles({ excludedAssortmentIds: assortmentIds, }); const productIds = await modules.products.findProductIds({ includeDrafts: true }); const deletedProductTextsCount = await modules.products.texts.deleteMany({ excludedProductIds: productIds, }); const deletedProductVariationsCount = await modules.products.variations.deleteVariations({ excludedProductIds: productIds, }); const deletedProductMediaCount = await modules.products.media.deleteMediaFiles({ excludedProductIds: productIds, }); const productMedia = await modules.products.media.findProductMedias({}, { projection: { mediaId: 1 } }); const assortmentMedia = await modules.assortments.media.findAssortmentMedias({}, { projection: { mediaId: 1 } }); const allFileIdsLinked = [...productMedia, ...assortmentMedia].map((l) => l?.mediaId); const allFileIdsRelevant = (await modules.files.findFiles({ paths: ['product-media', 'assortment-media'] }, { projection: { _id: 1 } })).map((a) => a._id); const fileIdsToRemove = allFileIdsRelevant.filter((fileId) => { return !allFileIdsLinked.includes(fileId); }) || []; const bulkImportMedia = await await modules.files.findFiles({ path: 'bulk-import-streams', createdBefore: new Date(Date.now() - 1000 * 60 * 60 * 24 * bulkImportMaxAgeInDays), }); bulkImportMedia.forEach(async (media) => { fileIdsToRemove.push(media._id); }); const deletedFilesCount = fileIdsToRemove.length > 0 ? await services.files.removeFiles({ fileIds: fileIdsToRemove, }) : 0; const result = { deletedFilterTextsCount, deletedProductMediaCount, deletedProductTextsCount, deletedProductVariationsCount, deletedAssortmentMediaCount, deletedAssortmentTextsCount, deletedFilesCount, }; if (error) { return { success: false, result, error, }; } return { success: true, result, }; } catch (err) { return { success: false, error: { name: err.name, message: err.message, stack: err.stack, }, }; } }, }; export default ZombieKillerWorker;