UNPKG

@jrmc/adonis-attachment

Version:

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

48 lines (47 loc) 1.57 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)); } }