UNPKG

medusa-variant-images-updated

Version:
144 lines 13.5 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const utils_1 = require("@medusajs/framework/utils"); const variant_images_settings_1 = __importDefault(require("./models/variant-images-settings")); const variant_images_1 = __importDefault(require("./models/variant-images")); const framework_1 = require("@medusajs/framework"); class VariantImagesSettingsService extends (0, utils_1.MedusaService)({ VariantImagesSettings: variant_images_settings_1.default, VariantImage: variant_images_1.default }) { async create(data) { // Only include known properties: variant_id, url, position return this.createVariantImages({ id: undefined, // or id: null, variant_id: data.variant_id, url: data.url, type: data.type, position: data.position, }); } async list(filter = {}, options = {}) { const knex = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION); const { variant_id, product_id, type, order_by, order_direction, offset = 0, limit = 50, ...rest } = filter; const conditions = { ...rest }; let variantIds = undefined; if (product_id) { // Only get non-deleted variants for the product const variants = await knex('product_variant') .select('id') .where('product_id', product_id) .whereNull('deleted_at'); variantIds = variants.map((v) => v.id); } if (variant_id) { // Only return if the variant is not deleted const variant = await knex('product_variant') .select('id') .where('id', variant_id) .whereNull('deleted_at') .first(); if (variant) { conditions.variant_id = variant_id; } else { // If the variant is deleted, return empty result return { data: [], pagination: { offset, limit, total: 0 } }; } } else if (variantIds && variantIds.length > 0) { conditions.variant_id = variantIds; } if (type) conditions.type = type; const order = {}; if (order_by) { order[order_by] = order_direction?.toUpperCase() === "DESC" ? "DESC" : "ASC"; } else { order.position = "ASC"; } const [results, totalCount] = await this.listAndCountVariantImages(conditions, { ...options, skip: offset, take: limit, order }); return { data: results, pagination: { offset, limit, total: totalCount }, }; } async getById(id) { return this.retrieveVariantImage(id); } async updateById(id, data) { const updated = await this.updateVariantImages([{ selector: { id }, data }]); return Array.isArray(updated) ? updated[0] : updated; } async deleteById(ids) { const idArray = Array.isArray(ids) ? ids : [ids]; await this.deleteVariantImages(idArray); return { message: "Variant image(s) successfully deleted." }; } async batchUploadByOption({ product_id, option_id, option_value, images }) { const knex = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.PG_CONNECTION); // 1. Find all variant IDs for the product with the matching option value const matchingVariants = await knex('product_variant as pv') .join('product_variant_option as pvo', 'pv.id', 'pvo.variant_id') .join('product_option_value as pov', 'pvo.option_value_id', 'pov.id') .where('pv.product_id', product_id) .whereNull('pv.deleted_at') .where('pov.option_id', option_id) .where('pov.value', option_value) .select('pv.id as variant_id'); const variantIds = matchingVariants.map((row) => row.variant_id); // 2. Fetch all existing images for all relevant variants in one query const existingImages = await knex('variant_images') .whereIn('variant_id', variantIds); // 3. Build lookup maps const byVariantUrl = new Map(); const byVariantType = new Map(); for (const img of existingImages) { byVariantUrl.set(`${img.variant_id}|${img.url}`, img); byVariantType.set(`${img.variant_id}|${img.type}`, img); } // 4. Prepare updates/inserts const updates = []; const inserts = []; for (const variant_id of variantIds) { for (const img of images) { const urlKey = `${variant_id}|${img.url}`; const typeKey = `${variant_id}|${img.type}`; const byUrl = byVariantUrl.get(urlKey); const byType = byVariantType.get(typeKey); if (byUrl) { if (img.type !== byUrl.type || img.position !== byUrl.position) { updates.push({ id: byUrl.id, type: img.type, position: img.position }); } continue; } if (byType) { if (img.url !== byType.url || img.position !== byType.position) { updates.push({ id: byType.id, url: img.url, position: img.position }); } continue; } inserts.push({ variant_id, url: img.url, type: img.type, position: img.position, }); } } // 5. Run updates and inserts in batch for (const upd of updates) { await knex('variant_images').where({ id: upd.id }).update(upd); } if (inserts.length) { await knex('variant_images').insert(inserts); } return { updated: variantIds.length, inserted: inserts.length, updatedImages: updates.length }; } } exports.default = VariantImagesSettingsService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3ZhcmlhbnQtaW1hZ2VzLXNldHRpbmdzL3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBcUY7QUFDckYsK0ZBQXFFO0FBQ3JFLDZFQUFtRDtBQUVuRCxtREFBZ0Q7QUFVaEQsTUFBTSw0QkFBNkIsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDckQscUJBQXFCLEVBQXJCLGlDQUFxQjtJQUNyQixZQUFZLEVBQVosd0JBQVk7Q0FDZixDQUFDO0lBQ0UsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUEyRTtRQUNwRiwyREFBMkQ7UUFDM0QsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsRUFBRSxFQUFFLFNBQVMsRUFBRSxlQUFlO1lBQzlCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7WUFDYixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixRQUFRLEVBQUUsSUFBSSxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBNkIsRUFBRSxFQUFFLFVBQStCLEVBQUU7UUFDekUsTUFBTSxJQUFJLEdBQUcscUJBQVMsQ0FBQyxPQUFPLENBQU8saUNBQXlCLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDOUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQzVHLE1BQU0sVUFBVSxHQUF3QixFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxVQUFVLEdBQXlCLFNBQVMsQ0FBQztRQUVqRCxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ2IsZ0RBQWdEO1lBQ2hELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDO2lCQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDO2lCQUNaLEtBQUssQ0FBQyxZQUFZLEVBQUUsVUFBVSxDQUFDO2lCQUMvQixTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0IsVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNoRCxDQUFDO1FBRUQsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLDRDQUE0QztZQUM1QyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztpQkFDeEMsTUFBTSxDQUFDLElBQUksQ0FBQztpQkFDWixLQUFLLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQztpQkFDdkIsU0FBUyxDQUFDLFlBQVksQ0FBQztpQkFDdkIsS0FBSyxFQUFFLENBQUM7WUFDYixJQUFJLE9BQU8sRUFBRSxDQUFDO2dCQUNWLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQ3ZDLENBQUM7aUJBQU0sQ0FBQztnQkFDSixpREFBaUQ7Z0JBQ2pELE9BQU8sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDakUsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLElBQUk7WUFBRSxVQUFVLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBbUMsRUFBRSxDQUFDO1FBQ2pELElBQUksUUFBUSxFQUFFLENBQUM7WUFDWCxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsZUFBZSxFQUFFLFdBQVcsRUFBRSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDakYsQ0FBQzthQUFNLENBQUM7WUFDSixLQUFLLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxNQUFNLElBQUksQ0FBQyx5QkFBeUIsQ0FDOUQsVUFBVSxFQUNWLEVBQUUsR0FBRyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUNuRCxDQUFDO1FBQ0YsT0FBTztZQUNILElBQUksRUFBRSxPQUFPO1lBQ2IsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFO1NBQ25ELENBQUM7SUFDTixDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFVO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxLQUFLLENBQUMsVUFBVSxDQUFDLEVBQVUsRUFBRSxJQUFvRjtRQUM3RyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdFLE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDekQsQ0FBQztJQUVELEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBc0I7UUFDbkMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pELE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sRUFBRSxPQUFPLEVBQUUsd0NBQXdDLEVBQUUsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEVBQ3hCLFVBQVUsRUFDVixTQUFTLEVBQ1QsWUFBWSxFQUNaLE1BQU0sRUFNUDtRQUNDLE1BQU0sSUFBSSxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFPLGlDQUF5QixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRTlFLHlFQUF5RTtRQUN6RSxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDO2FBQ3pELElBQUksQ0FBQywrQkFBK0IsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLENBQUM7YUFDaEUsSUFBSSxDQUFDLDZCQUE2QixFQUFFLHFCQUFxQixFQUFFLFFBQVEsQ0FBQzthQUNwRSxLQUFLLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQzthQUNsQyxTQUFTLENBQUMsZUFBZSxDQUFDO2FBQzFCLEtBQUssQ0FBQyxlQUFlLEVBQUUsU0FBUyxDQUFDO2FBQ2pDLEtBQUssQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO2FBQ2hDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRWpDLE1BQU0sVUFBVSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRXRFLHNFQUFzRTtRQUN0RSxNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUNoRCxPQUFPLENBQUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJDLHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sYUFBYSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDaEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNqQyxZQUFZLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDdEQsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzFELENBQUM7UUFFRCw2QkFBNkI7UUFDN0IsTUFBTSxPQUFPLEdBQVUsRUFBRSxDQUFDO1FBQzFCLE1BQU0sT0FBTyxHQUFVLEVBQUUsQ0FBQztRQUUxQixLQUFLLE1BQU0sVUFBVSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLEtBQUssTUFBTSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLE1BQU0sTUFBTSxHQUFHLEdBQUcsVUFBVSxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUMsTUFBTSxPQUFPLEdBQUcsR0FBRyxVQUFVLElBQUksR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUM1QyxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLE1BQU0sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUUxQyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUNWLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMvRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUN6RSxDQUFDO29CQUNELFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNYLElBQUksR0FBRyxDQUFDLEdBQUcsS0FBSyxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO3dCQUMvRCxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO29CQUN4RSxDQUFDO29CQUNELFNBQVM7Z0JBQ1gsQ0FBQztnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDO29CQUNYLFVBQVU7b0JBQ1YsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHO29CQUNaLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7aUJBQ3ZCLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDMUIsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFDRCxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWEsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDakcsQ0FBQztDQUNOO0FBRUQsa0JBQWUsNEJBQTRCLENBQUMifQ==