@jrmc/adonis-attachment
Version:
Turn any field on your Lucid model to an attachment data type
49 lines (48 loc) • 1.58 kB
JavaScript
/**
* @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));
}
}