mowing and properties

This commit is contained in:
Jake Kasper
2025-09-03 10:28:24 -04:00
parent 1c6ab9e569
commit fe6f7f3858
4 changed files with 219 additions and 15 deletions

View File

@@ -83,8 +83,15 @@ router.post('/sessions', validateRequest(mowingSessionSchema), async (req, res,
// GET /api/mowing/sessions - list sessions for user
router.get('/sessions', async (req, res, next) => {
try {
const { property_id } = req.query;
const params = [req.user.id];
let where = 'ms.user_id=$1';
if (property_id) {
params.push(property_id);
where += ` AND p.id=$${params.length}`;
}
const result = await pool.query(
`SELECT ms.*, p.name as property_name, ue.custom_name as equipment_name,
`SELECT ms.*, p.name as property_name, ue.custom_name as equipment_name, ue.cutting_width_inches,
STRING_AGG(ls.name, ', ') as section_names,
SUM(ls.area) as total_area
FROM mowing_sessions ms
@@ -92,11 +99,11 @@ router.get('/sessions', async (req, res, next) => {
LEFT JOIN user_equipment ue ON ms.equipment_id=ue.id
JOIN mowing_session_sections lss ON lss.session_id = ms.id
JOIN lawn_sections ls ON lss.lawn_section_id = ls.id
WHERE ms.user_id=$1
WHERE ${where}
GROUP BY ms.id, p.name, ue.custom_name
ORDER BY ms.created_at DESC
LIMIT 200`,
[req.user.id]
params
);
res.json({ success: true, data: { sessions: result.rows } });
} catch (error) {
@@ -109,7 +116,7 @@ router.get('/sessions/:id', async (req, res, next) => {
try {
const { id } = req.params;
const sessionRes = await pool.query(
`SELECT ms.*, p.name as property_name, ue.custom_name as equipment_name
`SELECT ms.*, p.name as property_name, ue.custom_name as equipment_name, ue.cutting_width_inches
FROM mowing_sessions ms
JOIN properties p ON ms.property_id=p.id
LEFT JOIN user_equipment ue ON ms.equipment_id=ue.id
@@ -218,8 +225,15 @@ router.put('/plans/:id/status', async (req, res, next) => {
// Alias /logs to sessions to be consistent with Applications
router.get('/logs', async (req, res, next) => {
try {
const { property_id } = req.query;
const params = [req.user.id];
let where = 'ms.user_id=$1';
if (property_id) {
params.push(property_id);
where += ` AND p.id=$${params.length}`;
}
const rs = await pool.query(
`SELECT ms.*, p.name as property_name, ue.custom_name as equipment_name,
`SELECT ms.*, p.name as property_name, ue.custom_name as equipment_name, ue.cutting_width_inches,
STRING_AGG(ls.name, ', ') as section_names,
SUM(ls.area) as total_area
FROM mowing_sessions ms
@@ -227,10 +241,10 @@ router.get('/logs', async (req, res, next) => {
LEFT JOIN user_equipment ue ON ms.equipment_id=ue.id
JOIN mowing_session_sections lss ON lss.session_id = ms.id
JOIN lawn_sections ls ON lss.lawn_section_id = ls.id
WHERE ms.user_id=$1
WHERE ${where}
GROUP BY ms.id, p.name, ue.custom_name
ORDER BY ms.created_at DESC
LIMIT 200`, [req.user.id]);
LIMIT 200`, params);
res.json({ success: true, data: { logs: rs.rows } });
} catch (error) { next(error); }
});