This commit is contained in:
Jake Kasper
2025-09-05 08:22:34 -04:00
parent 7e05fa7484
commit 0d23bd0dc0
3 changed files with 153 additions and 4 deletions

View File

@@ -101,4 +101,63 @@ router.post('/plans/:id/points', async (req,res,next)=>{
} catch (e) { next(e); }
});
// PUT /api/watering/points/:id - update a single point
router.put('/points/:id', async (req, res, next) => {
try {
const pointId = req.params.id;
// Verify ownership by joining plans
const own = await pool.query(
`SELECT wpp.id FROM watering_plan_points wpp
JOIN watering_plans wp ON wpp.plan_id = wp.id
WHERE wpp.id=$1 AND wp.user_id=$2`, [pointId, req.user.id]
);
if (own.rows.length === 0) throw new AppError('Point not found', 404);
const p = req.body || {};
// Recompute coverage if geometry changed
const coverage = computeCoverageSqft({
sprinkler_head_type: p.sprinklerHeadType,
sprinkler_throw_feet: p.throwFeet,
sprinkler_degrees: p.degrees,
sprinkler_length_feet: p.lengthFeet,
sprinkler_width_feet: p.widthFeet
});
const rs = await pool.query(
`UPDATE watering_plan_points SET
lat = COALESCE($1, lat),
lng = COALESCE($2, lng),
duration_minutes = COALESCE($3, duration_minutes),
sprinkler_mount = COALESCE($4, sprinkler_mount),
sprinkler_head_type = COALESCE($5, sprinkler_head_type),
sprinkler_gpm = COALESCE($6, sprinkler_gpm),
sprinkler_throw_feet = COALESCE($7, sprinkler_throw_feet),
sprinkler_degrees = COALESCE($8, sprinkler_degrees),
sprinkler_length_feet = COALESCE($9, sprinkler_length_feet),
sprinkler_width_feet = COALESCE($10, sprinkler_width_feet),
sprinkler_heading_degrees = COALESCE($11, sprinkler_heading_degrees),
coverage_sqft = COALESCE($12, coverage_sqft)
WHERE id=$13 RETURNING *`,
[p.lat, p.lng, p.durationMinutes, p.mountType, p.sprinklerHeadType, p.gpm,
p.throwFeet, p.degrees, p.lengthFeet, p.widthFeet, p.headingDegrees, coverage || null, pointId]
);
res.json({ success:true, data:{ point: rs.rows[0] }});
} catch (e) { next(e); }
});
// DELETE /api/watering/points/:id
router.delete('/points/:id', async (req,res,next)=>{
try {
const pointId = req.params.id;
const own = await pool.query(
`SELECT wpp.id FROM watering_plan_points wpp
JOIN watering_plans wp ON wpp.plan_id = wp.id
WHERE wpp.id=$1 AND wp.user_id=$2`, [pointId, req.user.id]
);
if (own.rows.length === 0) throw new AppError('Point not found', 404);
await pool.query('DELETE FROM watering_plan_points WHERE id=$1', [pointId]);
res.json({ success:true });
} catch (e) { next(e); }
});
module.exports = router;