module.exports = Self => { Self.remoteMethodCtx('editFixedPrice', { description: 'Updates a column for one or more fixed price', accessType: 'WRITE', accepts: [{ arg: 'field', type: 'string', required: true, description: `the column to edit` }, { arg: 'newValue', type: 'any', required: true, description: `The new value to save` }, { arg: 'lines', type: ['object'], required: true, description: `the buys which will be modified` }, { arg: 'filter', type: 'object', description: 'Filter defining where, order, offset, and limit - must be a JSON-encoded string' }], returns: { type: 'object', root: true }, http: { path: `/editFixedPrice`, verb: 'POST' } }); Self.editFixedPrice = async(ctx, field, newValue, lines, filter, options) => { let tx; const myOptions = {}; if (typeof options == 'object') Object.assign(myOptions, options); if (!myOptions.transaction) { tx = await Self.beginTransaction({}); myOptions.transaction = tx; } let modelName; let identifier; switch (field) { case 'hasMinPrice': case 'minPrice': modelName = 'Item'; identifier = 'itemFk'; break; case 'rate2': case 'rate3': case 'started': case 'ended': case 'warehouseFk': modelName = 'FixedPrice'; identifier = 'id'; } const models = Self.app.models; const model = models[modelName]; try { const promises = []; const value = {}; value[field] = newValue; if (filter) { filter = {where: filter}; lines = await models.FixedPrice.filter(ctx, filter, myOptions); } const targets = lines.map(line => { return line[identifier]; }); for (let target of targets) promises.push(model.upsertWithWhere({id: target}, value, myOptions)); const result = await Promise.all(promises); if (tx) await tx.commit(); return result; } catch (e) { if (tx) await tx.rollback(); throw e; } }; };