freightdesk/webapp/src/routes/vehicles.js
FreightDesk 1a4eaaa040 Initial commit: FreightDesk v1.0
- Express + EJS server-rendered app
- Supabase PostgreSQL database
- Auth: username/password with bcrypt
- Dashboard with business stats
- Load CRUD with filters
- WhatsApp message parser
- Payment tracking
- Shipper & vehicle management
- Reports (monthly, top shippers, routes)
- Government-app aesthetic (tricolor theme)
- Dark mode support
- Docker + Coolify deployment ready
- Seed data from existing business ledger (88 loads, 41 shippers, 70 vehicles)
2026-06-07 18:57:24 +00:00

49 lines
1.7 KiB
JavaScript

const express = require('express');
const router = express.Router();
const supabase = require('../services/supabase');
const { requireAuth } = require('../middleware/auth');
const { asyncHandler } = require('../middleware/security');
// GET /vehicles — List all vehicles
router.get('/', requireAuth, asyncHandler(async (req, res) => {
const { data: vehicles } = await supabase
.from('vehicles')
.select('*')
.order('number');
res.render('pages/vehicles/list', { vehicles: vehicles || [] });
}));
// GET /vehicles/:id — Vehicle detail with loads
router.get('/:id', requireAuth, asyncHandler(async (req, res) => {
const { data: vehicle } = await supabase
.from('vehicles').select('*').eq('id', req.params.id).single();
if (!vehicle) return res.status(404).render('pages/404');
const { data: loads } = await supabase
.from('loads')
.select('*, shipper:shippers(name)')
.eq('vehicle_id', req.params.id)
.order('date', { ascending: false, nullsFirst: false });
res.render('pages/vehicles/detail', {
vehicle,
loads: loads || [],
});
}));
// POST /vehicles — Create/update vehicle
router.post('/', requireAuth, asyncHandler(async (req, res) => {
const { number, type, city, state, owner_name, owner_phone, is_active } = req.body;
const id = number.replace(/\s/g, '').toLowerCase();
await supabase.from('vehicles').upsert({
id, number: number.toUpperCase().replace(/\s/g, ''),
type: type || 'open', city: city || 'Thiruvananthapuram', state: state || 'Kerala',
owner_name: owner_name || null, owner_phone: owner_phone || null,
is_active: is_active === 'true' || is_active === 'on',
});
res.redirect('/vehicles/' + encodeURIComponent(id));
}));
module.exports = router;