diff --git a/backend/src/routes/productSpreaderSettings.js b/backend/src/routes/productSpreaderSettings.js index 3edc2f3..e36cd24 100644 --- a/backend/src/routes/productSpreaderSettings.js +++ b/backend/src/routes/productSpreaderSettings.js @@ -17,7 +17,14 @@ const spreaderSettingSchema = Joi.object({ settingValue: Joi.string().max(20).required(), rateDescription: Joi.string().max(200).allow(null, '').optional(), notes: Joi.string().allow(null, '').optional() -}).xor('productId', 'userProductId').and('equipmentId', 'settingValue'); // Must have either productId or userProductId, but not both +}).xor('productId', 'userProductId') + .when('equipmentId', { + is: Joi.exist(), + then: Joi.object(), // When equipmentId exists, spreaderBrand is optional + otherwise: Joi.object({ + spreaderBrand: Joi.string().max(100).required() // When no equipmentId, require spreaderBrand + }) + }); // Must have either productId or userProductId, but not both const idParamSchema = Joi.object({ id: Joi.number().integer().positive().required() diff --git a/frontend/src/pages/Products/Products.js b/frontend/src/pages/Products/Products.js index 41e273e..a6d043e 100644 --- a/frontend/src/pages/Products/Products.js +++ b/frontend/src/pages/Products/Products.js @@ -73,18 +73,25 @@ const Products = () => { // Save spreader settings if any if (productData.spreaderSettings && productData.spreaderSettings.length > 0) { - const settingPromises = productData.spreaderSettings.map(setting => - productSpreaderSettingsAPI.create({ + const settingPromises = productData.spreaderSettings.map(setting => { + const payload = { userProductId: createdProduct.id, - equipmentId: setting.equipmentId ? parseInt(setting.equipmentId) : null, - // Legacy fields for backward compatibility - spreaderBrand: setting.spreaderBrand || null, - spreaderModel: setting.spreaderModel || null, settingValue: setting.settingValue, rateDescription: setting.rateDescription || null, notes: setting.notes && setting.notes.trim() ? setting.notes.trim() : null - }) - ); + }; + + // Use equipment-based approach if equipmentId is available + if (setting.equipmentId) { + payload.equipmentId = parseInt(setting.equipmentId); + } else { + // Fall back to legacy approach + payload.spreaderBrand = setting.spreaderBrand; + payload.spreaderModel = setting.spreaderModel || null; + } + + return productSpreaderSettingsAPI.create(payload); + }); await Promise.all(settingPromises); }