This commit is contained in:
Jake Kasper
2025-08-29 08:34:25 -04:00
parent 822c200d86
commit cb160f21cc
3 changed files with 222 additions and 9 deletions

View File

@@ -711,17 +711,12 @@ router.get('/equipment/user', async (req, res, next) => {
const result = await pool.query(`
SELECT ue.*, u.email as user_email, u.first_name, u.last_name,
ec.name as category_name, et.name as type_name, et.manufacturer as type_manufacturer, et.model as type_model,
COUNT(DISTINCT nc.id) as nozzle_configurations,
COUNT(DISTINCT app.id) as usage_count
ec.name as category_name, et.name as type_name, et.manufacturer as type_manufacturer, et.model as type_model
FROM user_equipment ue
JOIN users u ON ue.user_id = u.id
LEFT JOIN equipment_categories ec ON ue.category_id = ec.id
LEFT JOIN equipment_types et ON ue.equipment_type_id = et.id
LEFT JOIN nozzle_configurations nc ON ue.id = nc.sprayer_id
LEFT JOIN application_plans app ON ue.id = app.equipment_id
${whereClause}
GROUP BY ue.id, u.email, u.first_name, u.last_name, ec.name, et.name, et.manufacturer, et.model
ORDER BY u.email, ue.custom_name
`, queryParams);
@@ -756,8 +751,6 @@ router.get('/equipment/user', async (req, res, next) => {
serialNumber: equipment.serial_number,
notes: equipment.notes,
isActive: equipment.is_active,
nozzleConfigurations: parseInt(equipment.nozzle_configurations),
usageCount: parseInt(equipment.usage_count),
createdAt: equipment.created_at,
updatedAt: equipment.updated_at
}))
@@ -822,4 +815,80 @@ router.post('/equipment/user/:id/promote', validateParams(idParamSchema), async
}
});
// @route GET /api/admin/products/:id/rates
// @desc Get application rates for a specific shared product
// @access Private (Admin)
router.get('/products/:id/rates', validateParams(idParamSchema), async (req, res, next) => {
try {
const productId = req.params.id;
const result = await pool.query(`
SELECT pr.*, p.name as product_name, p.brand as product_brand
FROM product_rates pr
JOIN products p ON pr.product_id = p.id
WHERE pr.product_id = $1
ORDER BY pr.application_type, pr.rate_amount
`, [productId]);
res.json({
success: true,
data: {
rates: result.rows.map(rate => ({
id: rate.id,
productId: rate.product_id,
productName: rate.product_name,
productBrand: rate.product_brand,
applicationType: rate.application_type,
rateAmount: parseFloat(rate.rate_amount),
rateUnit: rate.rate_unit,
notes: rate.notes,
createdAt: rate.created_at
}))
}
});
} catch (error) {
next(error);
}
});
// @route GET /api/admin/products/user/:id/spreader-settings
// @desc Get spreader settings for a specific user product
// @access Private (Admin)
router.get('/products/user/:id/spreader-settings', validateParams(idParamSchema), async (req, res, next) => {
try {
const userProductId = req.params.id;
const result = await pool.query(`
SELECT pss.*, ue.custom_name as equipment_name, ss.brand_name, ss.model, ss.setting_number
FROM product_spreader_settings pss
JOIN user_equipment ue ON pss.user_equipment_id = ue.id
LEFT JOIN spreader_settings ss ON pss.spreader_setting_id = ss.id
WHERE pss.user_product_id = $1
ORDER BY ue.custom_name, ss.brand_name
`, [userProductId]);
res.json({
success: true,
data: {
spreaderSettings: result.rows.map(setting => ({
id: setting.id,
userProductId: setting.user_product_id,
userEquipmentId: setting.user_equipment_id,
equipmentName: setting.equipment_name,
spreaderSettingId: setting.spreader_setting_id,
brandName: setting.brand_name,
model: setting.model,
settingNumber: setting.setting_number,
customRate: setting.custom_rate ? parseFloat(setting.custom_rate) : null,
customRateUnit: setting.custom_rate_unit,
notes: setting.notes,
createdAt: setting.created_at
}))
}
});
} catch (error) {
next(error);
}
});
module.exports = router;