UNPKG

@jrmc/adonis-attachment

Version:

Turn any field on your Lucid model to an attachment data type

49 lines (48 loc) 1.58 kB
/** * @jrmc/adonis-attachment * * @license MIT * @copyright Jeremy Chaufourier <jeremy@chaufourier.fr> */ import attachmentManager from '../../../services/main.js'; export default class VariantPurger { #filters; constructor(filters) { this.#filters = filters; } async purge(attachments) { const variantsToRemove = this.#getVariantsToRemove(attachments); await Promise.all(variantsToRemove.map(variant => attachmentManager.remove(variant))); this.#updateAttachmentVariants(attachments); } #getVariantsToRemove(attachments) { const variants = []; attachments.forEach(attachment => { if (attachment.variants) { attachment.variants.forEach(variant => { if (this.#shouldRemoveVariant(variant)) { variants.push(variant); } }); } }); return variants; } #updateAttachmentVariants(attachments) { attachments.forEach(attachment => { if (attachment.variants) { attachment.variants = this.#filterVariants(attachment.variants); } }); } #shouldRemoveVariant(variant) { return this.#filters?.variants === undefined || this.#filters.variants.includes(variant.key); } #filterVariants(variants) { if (this.#filters?.variants === undefined) { return []; } return variants.filter(variant => !this.#filters.variants.includes(variant.key)); } }