create-nodemin-app 1.0.16 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +59 -40
- package/package.json +1 -2
- package/templates/vrrs/README.md +161 -0
- package/templates/vrrs/backend/.env.example +4 -0
- package/templates/vrrs/backend/README.md +11 -0
- package/templates/vrrs/backend/config/db.js +33 -0
- package/templates/vrrs/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs/backend/constants/statuses.js +4 -0
- package/templates/vrrs/backend/controllers/authController.js +32 -0
- package/templates/vrrs/backend/controllers/customerController.js +103 -0
- package/templates/vrrs/backend/controllers/reportController.js +88 -0
- package/templates/vrrs/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs/backend/controllers/userController.js +83 -0
- package/templates/vrrs/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs/backend/middleware/auth.js +7 -0
- package/templates/vrrs/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs/backend/models/Counter.js +8 -0
- package/templates/vrrs/backend/models/Customer.js +15 -0
- package/templates/vrrs/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs/backend/models/User.js +14 -0
- package/templates/vrrs/backend/models/Vehicle.js +18 -0
- package/templates/vrrs/backend/package-lock.json +1546 -0
- package/templates/vrrs/backend/package.json +22 -0
- package/templates/vrrs/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs/backend/routes/reportRoutes.js +8 -0
- package/templates/vrrs/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs/backend/server.js +55 -0
- package/templates/vrrs/backend/utils/authUser.js +5 -0
- package/templates/vrrs/backend/utils/ids.js +6 -0
- package/templates/vrrs/frontend/index.html +12 -0
- package/templates/vrrs/frontend/package-lock.json +1634 -0
- package/templates/vrrs/frontend/package.json +23 -0
- package/templates/vrrs/frontend/public/favicon.svg +4 -0
- package/templates/vrrs/frontend/src/App.jsx +44 -0
- package/templates/vrrs/frontend/src/api/client.js +22 -0
- package/templates/vrrs/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs/frontend/src/index.css +27 -0
- package/templates/vrrs/frontend/src/main.jsx +16 -0
- package/templates/vrrs/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs/frontend/src/pages/ReportsPage.jsx +127 -0
- package/templates/vrrs/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs/frontend/src/theme.js +27 -0
- package/templates/vrrs/frontend/vite.config.js +8 -0
- package/templates/vrrs-aline/README.md +161 -0
- package/templates/vrrs-aline/backend/.env.example +4 -0
- package/templates/vrrs-aline/backend/README.md +11 -0
- package/templates/vrrs-aline/backend/config/db.js +33 -0
- package/templates/vrrs-aline/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-aline/backend/constants/statuses.js +4 -0
- package/templates/vrrs-aline/backend/controllers/authController.js +32 -0
- package/templates/vrrs-aline/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-aline/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-aline/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-aline/backend/controllers/userController.js +83 -0
- package/templates/vrrs-aline/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-aline/backend/middleware/auth.js +7 -0
- package/templates/vrrs-aline/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-aline/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-aline/backend/models/Counter.js +8 -0
- package/templates/vrrs-aline/backend/models/Customer.js +15 -0
- package/templates/vrrs-aline/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-aline/backend/models/User.js +14 -0
- package/templates/vrrs-aline/backend/models/Vehicle.js +18 -0
- package/templates/{HRMS_Mongodb → vrrs-aline}/backend/package-lock.json +1546 -1646
- package/templates/vrrs-aline/backend/package.json +22 -0
- package/templates/vrrs-aline/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-aline/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-aline/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-aline/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-aline/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-aline/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-aline/backend/server.js +55 -0
- package/templates/vrrs-aline/backend/utils/authUser.js +5 -0
- package/templates/vrrs-aline/backend/utils/ids.js +6 -0
- package/templates/{HRMS_Mysql → vrrs-aline}/frontend/index.html +1 -2
- package/templates/vrrs-aline/frontend/package-lock.json +1634 -0
- package/templates/vrrs-aline/frontend/package.json +23 -0
- package/templates/vrrs-aline/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-aline/frontend/src/App.jsx +44 -0
- package/templates/vrrs-aline/frontend/src/api/client.js +17 -0
- package/templates/vrrs-aline/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-aline/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-aline/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-aline/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-aline/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-aline/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-aline/frontend/src/index.css +36 -0
- package/templates/vrrs-aline/frontend/src/main.jsx +16 -0
- package/templates/vrrs-aline/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-aline/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-aline/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-aline/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-aline/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-aline/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-aline/frontend/src/theme.js +27 -0
- package/templates/vrrs-aline/frontend/vite.config.js +8 -0
- package/templates/vrrs-deby/README.md +161 -0
- package/templates/vrrs-deby/backend/.env.example +4 -0
- package/templates/vrrs-deby/backend/README.md +11 -0
- package/templates/vrrs-deby/backend/config/db.js +33 -0
- package/templates/vrrs-deby/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-deby/backend/constants/statuses.js +4 -0
- package/templates/vrrs-deby/backend/controllers/authController.js +32 -0
- package/templates/vrrs-deby/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-deby/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-deby/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-deby/backend/controllers/userController.js +83 -0
- package/templates/vrrs-deby/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-deby/backend/middleware/auth.js +7 -0
- package/templates/vrrs-deby/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-deby/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-deby/backend/models/Counter.js +8 -0
- package/templates/vrrs-deby/backend/models/Customer.js +15 -0
- package/templates/vrrs-deby/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-deby/backend/models/User.js +14 -0
- package/templates/vrrs-deby/backend/models/Vehicle.js +18 -0
- package/templates/{HRMS_Mysql → vrrs-deby}/backend/package-lock.json +457 -525
- package/templates/vrrs-deby/backend/package.json +22 -0
- package/templates/vrrs-deby/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-deby/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-deby/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-deby/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-deby/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-deby/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-deby/backend/server.js +55 -0
- package/templates/vrrs-deby/backend/utils/authUser.js +5 -0
- package/templates/vrrs-deby/backend/utils/ids.js +6 -0
- package/templates/vrrs-deby/frontend/index.html +12 -0
- package/templates/vrrs-deby/frontend/package-lock.json +1634 -0
- package/templates/vrrs-deby/frontend/package.json +23 -0
- package/templates/vrrs-deby/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-deby/frontend/src/App.jsx +44 -0
- package/templates/vrrs-deby/frontend/src/api/client.js +17 -0
- package/templates/vrrs-deby/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-deby/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-deby/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-deby/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-deby/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-deby/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-deby/frontend/src/index.css +31 -0
- package/templates/vrrs-deby/frontend/src/main.jsx +16 -0
- package/templates/vrrs-deby/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-deby/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-deby/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-deby/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-deby/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-deby/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-deby/frontend/src/theme.js +27 -0
- package/templates/vrrs-deby/frontend/vite.config.js +8 -0
- package/templates/vrrs-divine/README.md +161 -0
- package/templates/vrrs-divine/backend/.env.example +4 -0
- package/templates/vrrs-divine/backend/README.md +11 -0
- package/templates/vrrs-divine/backend/config/db.js +33 -0
- package/templates/vrrs-divine/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-divine/backend/constants/statuses.js +4 -0
- package/templates/vrrs-divine/backend/controllers/authController.js +32 -0
- package/templates/vrrs-divine/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-divine/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-divine/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-divine/backend/controllers/userController.js +83 -0
- package/templates/vrrs-divine/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-divine/backend/middleware/auth.js +7 -0
- package/templates/vrrs-divine/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-divine/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-divine/backend/models/Counter.js +8 -0
- package/templates/vrrs-divine/backend/models/Customer.js +15 -0
- package/templates/vrrs-divine/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-divine/backend/models/User.js +14 -0
- package/templates/vrrs-divine/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-divine/backend/package-lock.json +1546 -0
- package/templates/vrrs-divine/backend/package.json +22 -0
- package/templates/vrrs-divine/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-divine/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-divine/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-divine/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-divine/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-divine/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-divine/backend/server.js +55 -0
- package/templates/vrrs-divine/backend/utils/authUser.js +5 -0
- package/templates/vrrs-divine/backend/utils/ids.js +6 -0
- package/templates/vrrs-divine/frontend/index.html +12 -0
- package/templates/vrrs-divine/frontend/package-lock.json +1634 -0
- package/templates/vrrs-divine/frontend/package.json +23 -0
- package/templates/vrrs-divine/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-divine/frontend/src/App.jsx +44 -0
- package/templates/vrrs-divine/frontend/src/api/client.js +17 -0
- package/templates/vrrs-divine/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-divine/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-divine/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-divine/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-divine/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-divine/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-divine/frontend/src/index.css +31 -0
- package/templates/vrrs-divine/frontend/src/main.jsx +16 -0
- package/templates/vrrs-divine/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-divine/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-divine/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-divine/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-divine/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-divine/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-divine/frontend/src/theme.js +27 -0
- package/templates/vrrs-divine/frontend/vite.config.js +8 -0
- package/templates/vrrs-huggy/README.md +161 -0
- package/templates/vrrs-huggy/backend/.env.example +4 -0
- package/templates/vrrs-huggy/backend/README.md +11 -0
- package/templates/vrrs-huggy/backend/config/db.js +33 -0
- package/templates/vrrs-huggy/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-huggy/backend/constants/statuses.js +4 -0
- package/templates/vrrs-huggy/backend/controllers/authController.js +32 -0
- package/templates/vrrs-huggy/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-huggy/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-huggy/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-huggy/backend/controllers/userController.js +83 -0
- package/templates/vrrs-huggy/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-huggy/backend/middleware/auth.js +7 -0
- package/templates/vrrs-huggy/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-huggy/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-huggy/backend/models/Counter.js +8 -0
- package/templates/vrrs-huggy/backend/models/Customer.js +15 -0
- package/templates/vrrs-huggy/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-huggy/backend/models/User.js +14 -0
- package/templates/vrrs-huggy/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-huggy/backend/package-lock.json +1546 -0
- package/templates/vrrs-huggy/backend/package.json +22 -0
- package/templates/vrrs-huggy/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-huggy/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-huggy/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-huggy/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-huggy/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-huggy/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-huggy/backend/server.js +55 -0
- package/templates/vrrs-huggy/backend/utils/authUser.js +5 -0
- package/templates/vrrs-huggy/backend/utils/ids.js +6 -0
- package/templates/vrrs-huggy/frontend/index.html +12 -0
- package/templates/vrrs-huggy/frontend/package-lock.json +1634 -0
- package/templates/vrrs-huggy/frontend/package.json +23 -0
- package/templates/vrrs-huggy/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-huggy/frontend/src/App.jsx +44 -0
- package/templates/vrrs-huggy/frontend/src/api/client.js +17 -0
- package/templates/vrrs-huggy/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-huggy/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-huggy/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-huggy/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-huggy/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-huggy/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-huggy/frontend/src/index.css +31 -0
- package/templates/vrrs-huggy/frontend/src/main.jsx +16 -0
- package/templates/vrrs-huggy/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-huggy/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-huggy/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-huggy/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-huggy/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-huggy/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-huggy/frontend/src/theme.js +27 -0
- package/templates/vrrs-huggy/frontend/vite.config.js +8 -0
- package/templates/vrrs-kelia/README.md +161 -0
- package/templates/vrrs-kelia/backend/.env.example +4 -0
- package/templates/vrrs-kelia/backend/README.md +11 -0
- package/templates/vrrs-kelia/backend/config/db.js +33 -0
- package/templates/vrrs-kelia/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-kelia/backend/constants/statuses.js +4 -0
- package/templates/vrrs-kelia/backend/controllers/authController.js +32 -0
- package/templates/vrrs-kelia/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-kelia/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-kelia/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-kelia/backend/controllers/userController.js +83 -0
- package/templates/vrrs-kelia/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-kelia/backend/middleware/auth.js +7 -0
- package/templates/vrrs-kelia/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-kelia/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-kelia/backend/models/Counter.js +8 -0
- package/templates/vrrs-kelia/backend/models/Customer.js +15 -0
- package/templates/vrrs-kelia/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-kelia/backend/models/User.js +14 -0
- package/templates/vrrs-kelia/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-kelia/backend/package-lock.json +1546 -0
- package/templates/vrrs-kelia/backend/package.json +22 -0
- package/templates/vrrs-kelia/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-kelia/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-kelia/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-kelia/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-kelia/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-kelia/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-kelia/backend/server.js +55 -0
- package/templates/vrrs-kelia/backend/utils/authUser.js +5 -0
- package/templates/vrrs-kelia/backend/utils/ids.js +6 -0
- package/templates/vrrs-kelia/frontend/index.html +12 -0
- package/templates/vrrs-kelia/frontend/package-lock.json +1634 -0
- package/templates/vrrs-kelia/frontend/package.json +23 -0
- package/templates/vrrs-kelia/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-kelia/frontend/src/App.jsx +44 -0
- package/templates/vrrs-kelia/frontend/src/api/client.js +17 -0
- package/templates/vrrs-kelia/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-kelia/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-kelia/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-kelia/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-kelia/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-kelia/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-kelia/frontend/src/index.css +31 -0
- package/templates/vrrs-kelia/frontend/src/main.jsx +16 -0
- package/templates/vrrs-kelia/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-kelia/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-kelia/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-kelia/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-kelia/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-kelia/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-kelia/frontend/src/theme.js +27 -0
- package/templates/vrrs-kelia/frontend/vite.config.js +8 -0
- package/templates/vrrs-kevine/README.md +161 -0
- package/templates/vrrs-kevine/backend/.env.example +4 -0
- package/templates/vrrs-kevine/backend/README.md +11 -0
- package/templates/vrrs-kevine/backend/config/db.js +33 -0
- package/templates/vrrs-kevine/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-kevine/backend/constants/statuses.js +4 -0
- package/templates/vrrs-kevine/backend/controllers/authController.js +32 -0
- package/templates/vrrs-kevine/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-kevine/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-kevine/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-kevine/backend/controllers/userController.js +83 -0
- package/templates/vrrs-kevine/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-kevine/backend/middleware/auth.js +7 -0
- package/templates/vrrs-kevine/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-kevine/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-kevine/backend/models/Counter.js +8 -0
- package/templates/vrrs-kevine/backend/models/Customer.js +15 -0
- package/templates/vrrs-kevine/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-kevine/backend/models/User.js +14 -0
- package/templates/vrrs-kevine/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-kevine/backend/package-lock.json +1546 -0
- package/templates/vrrs-kevine/backend/package.json +22 -0
- package/templates/vrrs-kevine/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-kevine/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-kevine/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-kevine/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-kevine/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-kevine/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-kevine/backend/server.js +55 -0
- package/templates/vrrs-kevine/backend/utils/authUser.js +5 -0
- package/templates/vrrs-kevine/backend/utils/ids.js +6 -0
- package/templates/vrrs-kevine/frontend/index.html +12 -0
- package/templates/vrrs-kevine/frontend/package-lock.json +1634 -0
- package/templates/vrrs-kevine/frontend/package.json +23 -0
- package/templates/vrrs-kevine/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-kevine/frontend/src/App.jsx +44 -0
- package/templates/vrrs-kevine/frontend/src/api/client.js +17 -0
- package/templates/vrrs-kevine/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-kevine/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-kevine/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-kevine/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-kevine/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-kevine/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-kevine/frontend/src/index.css +31 -0
- package/templates/vrrs-kevine/frontend/src/main.jsx +16 -0
- package/templates/vrrs-kevine/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-kevine/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-kevine/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-kevine/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-kevine/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-kevine/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-kevine/frontend/src/theme.js +27 -0
- package/templates/vrrs-kevine/frontend/vite.config.js +8 -0
- package/templates/vrrs-mbarush/README.md +161 -0
- package/templates/vrrs-mbarush/backend/.env.example +4 -0
- package/templates/vrrs-mbarush/backend/README.md +11 -0
- package/templates/vrrs-mbarush/backend/config/db.js +33 -0
- package/templates/vrrs-mbarush/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-mbarush/backend/constants/statuses.js +4 -0
- package/templates/vrrs-mbarush/backend/controllers/authController.js +32 -0
- package/templates/vrrs-mbarush/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-mbarush/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-mbarush/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-mbarush/backend/controllers/userController.js +83 -0
- package/templates/vrrs-mbarush/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-mbarush/backend/middleware/auth.js +7 -0
- package/templates/vrrs-mbarush/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-mbarush/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-mbarush/backend/models/Counter.js +8 -0
- package/templates/vrrs-mbarush/backend/models/Customer.js +15 -0
- package/templates/vrrs-mbarush/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-mbarush/backend/models/User.js +14 -0
- package/templates/vrrs-mbarush/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-mbarush/backend/package-lock.json +1546 -0
- package/templates/vrrs-mbarush/backend/package.json +22 -0
- package/templates/vrrs-mbarush/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-mbarush/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-mbarush/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-mbarush/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-mbarush/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-mbarush/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-mbarush/backend/server.js +55 -0
- package/templates/vrrs-mbarush/backend/utils/authUser.js +5 -0
- package/templates/vrrs-mbarush/backend/utils/ids.js +6 -0
- package/templates/vrrs-mbarush/frontend/index.html +12 -0
- package/templates/vrrs-mbarush/frontend/package-lock.json +1634 -0
- package/templates/vrrs-mbarush/frontend/package.json +23 -0
- package/templates/vrrs-mbarush/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-mbarush/frontend/src/App.jsx +44 -0
- package/templates/vrrs-mbarush/frontend/src/api/client.js +17 -0
- package/templates/vrrs-mbarush/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-mbarush/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-mbarush/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-mbarush/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-mbarush/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-mbarush/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-mbarush/frontend/src/index.css +31 -0
- package/templates/vrrs-mbarush/frontend/src/main.jsx +16 -0
- package/templates/vrrs-mbarush/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-mbarush/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-mbarush/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-mbarush/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-mbarush/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-mbarush/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-mbarush/frontend/src/theme.js +27 -0
- package/templates/vrrs-mbarush/frontend/vite.config.js +8 -0
- package/templates/vrrs-orne/README.md +161 -0
- package/templates/vrrs-orne/backend/.env.example +4 -0
- package/templates/vrrs-orne/backend/README.md +11 -0
- package/templates/vrrs-orne/backend/config/db.js +33 -0
- package/templates/vrrs-orne/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-orne/backend/constants/statuses.js +4 -0
- package/templates/vrrs-orne/backend/controllers/authController.js +32 -0
- package/templates/vrrs-orne/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-orne/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-orne/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-orne/backend/controllers/userController.js +83 -0
- package/templates/vrrs-orne/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-orne/backend/middleware/auth.js +7 -0
- package/templates/vrrs-orne/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-orne/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-orne/backend/models/Counter.js +8 -0
- package/templates/vrrs-orne/backend/models/Customer.js +15 -0
- package/templates/vrrs-orne/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-orne/backend/models/User.js +14 -0
- package/templates/vrrs-orne/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-orne/backend/package-lock.json +1546 -0
- package/templates/vrrs-orne/backend/package.json +22 -0
- package/templates/vrrs-orne/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-orne/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-orne/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-orne/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-orne/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-orne/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-orne/backend/server.js +55 -0
- package/templates/vrrs-orne/backend/utils/authUser.js +5 -0
- package/templates/vrrs-orne/backend/utils/ids.js +6 -0
- package/templates/vrrs-orne/frontend/index.html +12 -0
- package/templates/vrrs-orne/frontend/package-lock.json +1634 -0
- package/templates/vrrs-orne/frontend/package.json +23 -0
- package/templates/vrrs-orne/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-orne/frontend/src/App.jsx +44 -0
- package/templates/vrrs-orne/frontend/src/api/client.js +17 -0
- package/templates/vrrs-orne/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-orne/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-orne/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-orne/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-orne/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-orne/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-orne/frontend/src/index.css +31 -0
- package/templates/vrrs-orne/frontend/src/main.jsx +16 -0
- package/templates/vrrs-orne/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-orne/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-orne/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-orne/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-orne/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-orne/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-orne/frontend/src/theme.js +27 -0
- package/templates/vrrs-orne/frontend/vite.config.js +8 -0
- package/templates/vrrs-pri/README.md +161 -0
- package/templates/vrrs-pri/backend/.env.example +4 -0
- package/templates/vrrs-pri/backend/README.md +11 -0
- package/templates/vrrs-pri/backend/config/db.js +33 -0
- package/templates/vrrs-pri/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-pri/backend/constants/statuses.js +4 -0
- package/templates/vrrs-pri/backend/controllers/authController.js +32 -0
- package/templates/vrrs-pri/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-pri/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-pri/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-pri/backend/controllers/userController.js +83 -0
- package/templates/vrrs-pri/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-pri/backend/middleware/auth.js +7 -0
- package/templates/vrrs-pri/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-pri/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-pri/backend/models/Counter.js +8 -0
- package/templates/vrrs-pri/backend/models/Customer.js +15 -0
- package/templates/vrrs-pri/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-pri/backend/models/User.js +14 -0
- package/templates/vrrs-pri/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-pri/backend/package-lock.json +1546 -0
- package/templates/vrrs-pri/backend/package.json +22 -0
- package/templates/vrrs-pri/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-pri/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-pri/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-pri/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-pri/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-pri/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-pri/backend/server.js +55 -0
- package/templates/vrrs-pri/backend/utils/authUser.js +5 -0
- package/templates/vrrs-pri/backend/utils/ids.js +6 -0
- package/templates/vrrs-pri/frontend/index.html +12 -0
- package/templates/vrrs-pri/frontend/package-lock.json +1634 -0
- package/templates/vrrs-pri/frontend/package.json +23 -0
- package/templates/vrrs-pri/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-pri/frontend/src/App.jsx +44 -0
- package/templates/vrrs-pri/frontend/src/api/client.js +17 -0
- package/templates/vrrs-pri/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-pri/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-pri/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-pri/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-pri/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-pri/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-pri/frontend/src/index.css +31 -0
- package/templates/vrrs-pri/frontend/src/main.jsx +16 -0
- package/templates/vrrs-pri/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-pri/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-pri/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-pri/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-pri/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-pri/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-pri/frontend/src/theme.js +27 -0
- package/templates/vrrs-pri/frontend/vite.config.js +8 -0
- package/templates/vrrs-price/README.md +161 -0
- package/templates/vrrs-price/backend/.env.example +4 -0
- package/templates/vrrs-price/backend/README.md +11 -0
- package/templates/vrrs-price/backend/config/db.js +33 -0
- package/templates/vrrs-price/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-price/backend/constants/statuses.js +4 -0
- package/templates/vrrs-price/backend/controllers/authController.js +32 -0
- package/templates/vrrs-price/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-price/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-price/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-price/backend/controllers/userController.js +83 -0
- package/templates/vrrs-price/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-price/backend/middleware/auth.js +7 -0
- package/templates/vrrs-price/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-price/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-price/backend/models/Counter.js +8 -0
- package/templates/vrrs-price/backend/models/Customer.js +15 -0
- package/templates/vrrs-price/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-price/backend/models/User.js +14 -0
- package/templates/vrrs-price/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-price/backend/package-lock.json +1546 -0
- package/templates/vrrs-price/backend/package.json +22 -0
- package/templates/vrrs-price/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-price/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-price/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-price/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-price/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-price/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-price/backend/server.js +55 -0
- package/templates/vrrs-price/backend/utils/authUser.js +5 -0
- package/templates/vrrs-price/backend/utils/ids.js +6 -0
- package/templates/vrrs-price/frontend/index.html +12 -0
- package/templates/vrrs-price/frontend/package-lock.json +1634 -0
- package/templates/vrrs-price/frontend/package.json +23 -0
- package/templates/vrrs-price/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-price/frontend/src/App.jsx +44 -0
- package/templates/vrrs-price/frontend/src/api/client.js +17 -0
- package/templates/vrrs-price/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-price/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-price/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-price/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-price/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-price/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-price/frontend/src/index.css +31 -0
- package/templates/vrrs-price/frontend/src/main.jsx +16 -0
- package/templates/vrrs-price/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-price/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-price/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-price/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-price/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-price/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-price/frontend/src/theme.js +27 -0
- package/templates/vrrs-price/frontend/vite.config.js +8 -0
- package/templates/vrrs-schella/README.md +161 -0
- package/templates/vrrs-schella/backend/.env.example +4 -0
- package/templates/vrrs-schella/backend/README.md +11 -0
- package/templates/vrrs-schella/backend/config/db.js +33 -0
- package/templates/vrrs-schella/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-schella/backend/constants/statuses.js +4 -0
- package/templates/vrrs-schella/backend/controllers/authController.js +32 -0
- package/templates/vrrs-schella/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-schella/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-schella/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-schella/backend/controllers/userController.js +83 -0
- package/templates/vrrs-schella/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-schella/backend/middleware/auth.js +7 -0
- package/templates/vrrs-schella/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-schella/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-schella/backend/models/Counter.js +8 -0
- package/templates/vrrs-schella/backend/models/Customer.js +15 -0
- package/templates/vrrs-schella/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-schella/backend/models/User.js +14 -0
- package/templates/vrrs-schella/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-schella/backend/package-lock.json +1546 -0
- package/templates/vrrs-schella/backend/package.json +22 -0
- package/templates/vrrs-schella/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-schella/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-schella/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-schella/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-schella/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-schella/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-schella/backend/server.js +55 -0
- package/templates/vrrs-schella/backend/utils/authUser.js +5 -0
- package/templates/vrrs-schella/backend/utils/ids.js +6 -0
- package/templates/vrrs-schella/frontend/index.html +12 -0
- package/templates/vrrs-schella/frontend/package-lock.json +1634 -0
- package/templates/vrrs-schella/frontend/package.json +23 -0
- package/templates/vrrs-schella/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-schella/frontend/src/App.jsx +44 -0
- package/templates/vrrs-schella/frontend/src/api/client.js +17 -0
- package/templates/vrrs-schella/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-schella/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-schella/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-schella/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-schella/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-schella/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-schella/frontend/src/index.css +31 -0
- package/templates/vrrs-schella/frontend/src/main.jsx +16 -0
- package/templates/vrrs-schella/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-schella/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-schella/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-schella/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-schella/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-schella/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-schella/frontend/src/theme.js +27 -0
- package/templates/vrrs-schella/frontend/vite.config.js +8 -0
- package/templates/vrrs-trizzy/README.md +161 -0
- package/templates/vrrs-trizzy/backend/.env.example +4 -0
- package/templates/vrrs-trizzy/backend/README.md +11 -0
- package/templates/vrrs-trizzy/backend/config/db.js +33 -0
- package/templates/vrrs-trizzy/backend/constants/employeeStatuses.js +7 -0
- package/templates/vrrs-trizzy/backend/constants/statuses.js +4 -0
- package/templates/vrrs-trizzy/backend/controllers/authController.js +32 -0
- package/templates/vrrs-trizzy/backend/controllers/customerController.js +103 -0
- package/templates/vrrs-trizzy/backend/controllers/reportController.js +82 -0
- package/templates/vrrs-trizzy/backend/controllers/reservationController.js +142 -0
- package/templates/vrrs-trizzy/backend/controllers/userController.js +83 -0
- package/templates/vrrs-trizzy/backend/controllers/vehicleController.js +107 -0
- package/templates/vrrs-trizzy/backend/middleware/auth.js +7 -0
- package/templates/vrrs-trizzy/backend/middleware/requireAdmin.js +10 -0
- package/templates/vrrs-trizzy/backend/middleware/requireRole.js +14 -0
- package/templates/vrrs-trizzy/backend/models/Counter.js +8 -0
- package/templates/vrrs-trizzy/backend/models/Customer.js +15 -0
- package/templates/vrrs-trizzy/backend/models/ReservationRental.js +22 -0
- package/templates/vrrs-trizzy/backend/models/User.js +14 -0
- package/templates/vrrs-trizzy/backend/models/Vehicle.js +18 -0
- package/templates/vrrs-trizzy/backend/package-lock.json +1546 -0
- package/templates/vrrs-trizzy/backend/package.json +22 -0
- package/templates/vrrs-trizzy/backend/routes/authRoutes.js +9 -0
- package/templates/vrrs-trizzy/backend/routes/customerRoutes.js +11 -0
- package/templates/vrrs-trizzy/backend/routes/reportRoutes.js +7 -0
- package/templates/vrrs-trizzy/backend/routes/reservationRoutes.js +11 -0
- package/templates/vrrs-trizzy/backend/routes/userRoutes.js +10 -0
- package/templates/vrrs-trizzy/backend/routes/vehicleRoutes.js +11 -0
- package/templates/vrrs-trizzy/backend/server.js +55 -0
- package/templates/vrrs-trizzy/backend/utils/authUser.js +5 -0
- package/templates/vrrs-trizzy/backend/utils/ids.js +6 -0
- package/templates/vrrs-trizzy/frontend/index.html +12 -0
- package/templates/vrrs-trizzy/frontend/package-lock.json +1634 -0
- package/templates/vrrs-trizzy/frontend/package.json +23 -0
- package/templates/vrrs-trizzy/frontend/public/favicon.svg +4 -0
- package/templates/vrrs-trizzy/frontend/src/App.jsx +44 -0
- package/templates/vrrs-trizzy/frontend/src/api/client.js +17 -0
- package/templates/vrrs-trizzy/frontend/src/components/AppLayout.jsx +178 -0
- package/templates/vrrs-trizzy/frontend/src/components/AuthShell.jsx +22 -0
- package/templates/vrrs-trizzy/frontend/src/components/ui.jsx +378 -0
- package/templates/vrrs-trizzy/frontend/src/constants/nav.js +13 -0
- package/templates/vrrs-trizzy/frontend/src/constants/statuses.js +4 -0
- package/templates/vrrs-trizzy/frontend/src/context/AuthContext.jsx +49 -0
- package/templates/vrrs-trizzy/frontend/src/index.css +31 -0
- package/templates/vrrs-trizzy/frontend/src/main.jsx +16 -0
- package/templates/vrrs-trizzy/frontend/src/pages/CustomersPage.jsx +99 -0
- package/templates/vrrs-trizzy/frontend/src/pages/LoginPage.jsx +46 -0
- package/templates/vrrs-trizzy/frontend/src/pages/ReportsPage.jsx +146 -0
- package/templates/vrrs-trizzy/frontend/src/pages/ReservationsPage.jsx +143 -0
- package/templates/vrrs-trizzy/frontend/src/pages/UsersPage.jsx +86 -0
- package/templates/vrrs-trizzy/frontend/src/pages/VehiclesPage.jsx +109 -0
- package/templates/vrrs-trizzy/frontend/src/theme.js +27 -0
- package/templates/vrrs-trizzy/frontend/vite.config.js +8 -0
- package/templates/HRMS_Mongodb/README.md +0 -331
- package/templates/HRMS_Mongodb/backend/.env.example +0 -6
- package/templates/HRMS_Mongodb/backend/package.json +0 -26
- package/templates/HRMS_Mongodb/backend/src/config/db.js +0 -9
- package/templates/HRMS_Mongodb/backend/src/controllers/authController.js +0 -187
- package/templates/HRMS_Mongodb/backend/src/controllers/departmentController.js +0 -70
- package/templates/HRMS_Mongodb/backend/src/controllers/employeeController.js +0 -178
- package/templates/HRMS_Mongodb/backend/src/controllers/positionController.js +0 -66
- package/templates/HRMS_Mongodb/backend/src/middleware/auth.js +0 -57
- package/templates/HRMS_Mongodb/backend/src/middleware/errorHandler.js +0 -32
- package/templates/HRMS_Mongodb/backend/src/middleware/restrictToAdmin.js +0 -5
- package/templates/HRMS_Mongodb/backend/src/middleware/validate.js +0 -13
- package/templates/HRMS_Mongodb/backend/src/models/Department.js +0 -19
- package/templates/HRMS_Mongodb/backend/src/models/Employee.js +0 -81
- package/templates/HRMS_Mongodb/backend/src/models/Position.js +0 -19
- package/templates/HRMS_Mongodb/backend/src/models/User.js +0 -40
- package/templates/HRMS_Mongodb/backend/src/routes/authRoutes.js +0 -27
- package/templates/HRMS_Mongodb/backend/src/routes/departmentRoutes.js +0 -33
- package/templates/HRMS_Mongodb/backend/src/routes/employeeRoutes.js +0 -39
- package/templates/HRMS_Mongodb/backend/src/routes/positionRoutes.js +0 -32
- package/templates/HRMS_Mongodb/backend/src/server.js +0 -74
- package/templates/HRMS_Mongodb/backend/src/utils/roles.js +0 -5
- package/templates/HRMS_Mongodb/backend/src/utils/seed.js +0 -78
- package/templates/HRMS_Mongodb/backend/src/validators/authValidator.js +0 -61
- package/templates/HRMS_Mongodb/backend/src/validators/departmentValidator.js +0 -21
- package/templates/HRMS_Mongodb/backend/src/validators/employeeValidator.js +0 -27
- package/templates/HRMS_Mongodb/backend/src/validators/positionValidator.js +0 -26
- package/templates/HRMS_Mongodb/frontend/index.html +0 -19
- package/templates/HRMS_Mongodb/frontend/package-lock.json +0 -2812
- package/templates/HRMS_Mongodb/frontend/package.json +0 -25
- package/templates/HRMS_Mongodb/frontend/public/favicon.svg +0 -4
- package/templates/HRMS_Mongodb/frontend/src/App.jsx +0 -50
- package/templates/HRMS_Mongodb/frontend/src/api/axios.js +0 -54
- package/templates/HRMS_Mongodb/frontend/src/components/ProtectedRoute.jsx +0 -26
- package/templates/HRMS_Mongodb/frontend/src/components/layout/DashboardLayout.jsx +0 -16
- package/templates/HRMS_Mongodb/frontend/src/components/layout/Sidebar.jsx +0 -108
- package/templates/HRMS_Mongodb/frontend/src/components/ui/Button.jsx +0 -33
- package/templates/HRMS_Mongodb/frontend/src/components/ui/Input.jsx +0 -20
- package/templates/HRMS_Mongodb/frontend/src/components/ui/Modal.jsx +0 -48
- package/templates/HRMS_Mongodb/frontend/src/components/ui/Select.jsx +0 -27
- package/templates/HRMS_Mongodb/frontend/src/context/AuthContext.jsx +0 -97
- package/templates/HRMS_Mongodb/frontend/src/index.css +0 -34
- package/templates/HRMS_Mongodb/frontend/src/main.jsx +0 -16
- package/templates/HRMS_Mongodb/frontend/src/pages/Dashboard.jsx +0 -78
- package/templates/HRMS_Mongodb/frontend/src/pages/Departments.jsx +0 -144
- package/templates/HRMS_Mongodb/frontend/src/pages/Employees.jsx +0 -297
- package/templates/HRMS_Mongodb/frontend/src/pages/LeaveReport.jsx +0 -113
- package/templates/HRMS_Mongodb/frontend/src/pages/Login.jsx +0 -92
- package/templates/HRMS_Mongodb/frontend/src/pages/Positions.jsx +0 -157
- package/templates/HRMS_Mongodb/frontend/src/pages/Register.jsx +0 -93
- package/templates/HRMS_Mongodb/frontend/src/pages/ResetPassword.jsx +0 -135
- package/templates/HRMS_Mongodb/frontend/src/utils/roles.js +0 -1
- package/templates/HRMS_Mongodb/frontend/src/utils/session.js +0 -5
- package/templates/HRMS_Mongodb/frontend/src/utils/validation.js +0 -66
- package/templates/HRMS_Mongodb/frontend/vite.config.js +0 -16
- package/templates/HRMS_Mysql/backend/db.js +0 -13
- package/templates/HRMS_Mysql/backend/package.json +0 -21
- package/templates/HRMS_Mysql/backend/server.js +0 -421
- package/templates/HRMS_Mysql/frontend/dist/assets/index-CtLtQf3_.js +0 -75
- package/templates/HRMS_Mysql/frontend/dist/assets/index-Dq1AXlEY.css +0 -1
- package/templates/HRMS_Mysql/frontend/dist/index.html +0 -14
- package/templates/HRMS_Mysql/frontend/dist/vite.svg +0 -1
- package/templates/HRMS_Mysql/frontend/package-lock.json +0 -2978
- package/templates/HRMS_Mysql/frontend/package.json +0 -25
- package/templates/HRMS_Mysql/frontend/postcss.config.js +0 -6
- package/templates/HRMS_Mysql/frontend/public/vite.svg +0 -1
- package/templates/HRMS_Mysql/frontend/src/App.jsx +0 -55
- package/templates/HRMS_Mysql/frontend/src/api.js +0 -11
- package/templates/HRMS_Mysql/frontend/src/components/Layout.jsx +0 -59
- package/templates/HRMS_Mysql/frontend/src/index.css +0 -7
- package/templates/HRMS_Mysql/frontend/src/main.jsx +0 -13
- package/templates/HRMS_Mysql/frontend/src/pages/Dashboard.jsx +0 -45
- package/templates/HRMS_Mysql/frontend/src/pages/Departments.jsx +0 -108
- package/templates/HRMS_Mysql/frontend/src/pages/EmployeeStatusReport.jsx +0 -72
- package/templates/HRMS_Mysql/frontend/src/pages/Employees.jsx +0 -252
- package/templates/HRMS_Mysql/frontend/src/pages/ForgotPassword.jsx +0 -66
- package/templates/HRMS_Mysql/frontend/src/pages/Login.jsx +0 -79
- package/templates/HRMS_Mysql/frontend/src/pages/Positions.jsx +0 -109
- package/templates/HRMS_Mysql/frontend/src/pages/Register.jsx +0 -95
- package/templates/HRMS_Mysql/frontend/src/pages/Users.jsx +0 -133
- package/templates/HRMS_Mysql/frontend/tailwind.config.js +0 -26
- package/templates/HRMS_Mysql/frontend/vite.config.js +0 -15
- package/templates/HRMS_Mysql/hrms_schema.sql +0 -57
package/bin/cli.js
CHANGED
|
@@ -5,77 +5,96 @@ const path = require("path");
|
|
|
5
5
|
const readline = require("readline");
|
|
6
6
|
const { execSync } = require("child_process");
|
|
7
7
|
|
|
8
|
-
// Create interface
|
|
9
8
|
const rl = readline.createInterface({
|
|
10
9
|
input: process.stdin,
|
|
11
10
|
output: process.stdout
|
|
12
11
|
});
|
|
13
12
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
const projects = {
|
|
14
|
+
"1": { template: "vrrs", project: "vrrs-app", title: "VRRS" },
|
|
15
|
+
"2": { template: "vrrs-aline", project: "vrrs-aline-app", title: "VRRS-ALINE" },
|
|
16
|
+
"3": { template: "vrrs-deby", project: "vrrs-deby-app", title: "VRRS-DEBY" },
|
|
17
|
+
"4": { template: "vrrs-divine", project: "vrrs-divine-app", title: "VRRS-DIVINE" },
|
|
18
|
+
"5": { template: "vrrs-huggy", project: "vrrs-huggy-app", title: "VRRS-HUGGY" },
|
|
19
|
+
"6": { template: "vrrs-kelia", project: "vrrs-kelia-app", title: "VRRS-KELIA" },
|
|
20
|
+
"7": { template: "vrrs-kevine", project: "vrrs-kevine-app", title: "VRRS-KEVINE" },
|
|
21
|
+
"8": { template: "vrrs-mbarush", project: "vrrs-mbarush-app", title: "VRRS-MBARUSH" },
|
|
22
|
+
"9": { template: "vrrs-orne", project: "vrrs-orne-app", title: "VRRS-ORNE" },
|
|
23
|
+
"10": { template: "vrrs-pri", project: "vrrs-pri-app", title: "VRRS-PRI" },
|
|
24
|
+
"11": { template: "vrrs-price", project: "vrrs-price-app", title: "VRRS-PRICE" },
|
|
25
|
+
"12": { template: "vrrs-schella", project: "vrrs-schella-app", title: "VRRS-SCHELLA" },
|
|
26
|
+
"13": { template: "vrrs-trizzy", project: "vrrs-trizzy-app", title: "VRRS-TRIZZY" }
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
console.log("\n======================================");
|
|
30
|
+
console.log(" SELECT PROJECT TO CREATE");
|
|
31
|
+
console.log("======================================\n");
|
|
32
|
+
|
|
33
|
+
Object.entries(projects).forEach(([key, value]) => {
|
|
34
|
+
console.log(`${key}. ${value.title}`);
|
|
35
|
+
});
|
|
17
36
|
|
|
37
|
+
console.log("");
|
|
18
38
|
|
|
19
|
-
// Ask user
|
|
20
39
|
rl.question("Enter your choice: ", (choice) => {
|
|
21
40
|
|
|
22
|
-
|
|
23
|
-
let projectName = "";
|
|
24
|
-
|
|
25
|
-
switch (choice) {
|
|
26
|
-
case "1":
|
|
27
|
-
templateName = "HRMS_Mongodb";
|
|
28
|
-
projectName = "hrms-app";
|
|
29
|
-
break;
|
|
30
|
-
case "2":
|
|
31
|
-
templateName = "HRMS_Mysql";
|
|
32
|
-
projectName = "hrms-app";
|
|
33
|
-
break;
|
|
34
|
-
|
|
41
|
+
const selectedProject = projects[choice];
|
|
35
42
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return;
|
|
43
|
+
if (!selectedProject) {
|
|
44
|
+
console.log("\n❌ Invalid choice!");
|
|
45
|
+
rl.close();
|
|
46
|
+
return;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
|
-
const
|
|
44
|
-
|
|
49
|
+
const templatePath = path.resolve(
|
|
50
|
+
__dirname,
|
|
51
|
+
"../templates",
|
|
52
|
+
selectedProject.template
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
const targetPath = path.join(
|
|
56
|
+
process.cwd(),
|
|
57
|
+
selectedProject.project
|
|
58
|
+
);
|
|
45
59
|
|
|
46
60
|
if (!fs.existsSync(templatePath)) {
|
|
47
|
-
console.log(
|
|
61
|
+
console.log(`\n❌ Template not found: ${templatePath}`);
|
|
48
62
|
rl.close();
|
|
49
63
|
return;
|
|
50
64
|
}
|
|
51
65
|
|
|
52
66
|
if (fs.existsSync(targetPath)) {
|
|
53
|
-
console.log(
|
|
67
|
+
console.log(`\n❌ Folder "${selectedProject.project}" already exists.`);
|
|
54
68
|
rl.close();
|
|
55
69
|
return;
|
|
56
70
|
}
|
|
57
71
|
|
|
58
72
|
try {
|
|
59
|
-
|
|
73
|
+
console.log("\n📁 Creating project...\n");
|
|
74
|
+
|
|
60
75
|
fs.mkdirSync(targetPath, { recursive: true });
|
|
61
76
|
|
|
62
|
-
|
|
63
|
-
|
|
77
|
+
fs.cpSync(templatePath, targetPath, {
|
|
78
|
+
recursive: true
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
console.log(`✅ ${selectedProject.title} created successfully!`);
|
|
82
|
+
console.log(`📍 Location: ${targetPath}`);
|
|
64
83
|
|
|
65
|
-
console.log(
|
|
66
|
-
console.log(" Location:", targetPath);
|
|
84
|
+
console.log("\n📦 Installing dependencies...\n");
|
|
67
85
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
86
|
+
execSync("npm install", {
|
|
87
|
+
cwd: targetPath,
|
|
88
|
+
stdio: "inherit"
|
|
89
|
+
});
|
|
71
90
|
|
|
72
|
-
console.log("\n Setup complete!");
|
|
73
|
-
console.log(
|
|
74
|
-
console.log(`
|
|
75
|
-
console.log(
|
|
91
|
+
console.log("\n🎉 Setup complete!");
|
|
92
|
+
console.log("\nRun your project:");
|
|
93
|
+
console.log(`cd ${selectedProject.project}`);
|
|
94
|
+
console.log("npm run dev\n");
|
|
76
95
|
|
|
77
96
|
} catch (error) {
|
|
78
|
-
console.
|
|
97
|
+
console.error("\n❌ Error:", error.message);
|
|
79
98
|
}
|
|
80
99
|
|
|
81
100
|
rl.close();
|
package/package.json
CHANGED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Vehicle Rental and Reservation Subsystem (VRRS)
|
|
2
|
+
|
|
3
|
+
Web application for **SwitchWheels Enterprise** (Huye) to manage customers, fleet vehicles, reservations/rentals, and reporting.
|
|
4
|
+
|
|
5
|
+
## Stack
|
|
6
|
+
|
|
7
|
+
| Layer | Technology | Port |
|
|
8
|
+
|-------|------------|------|
|
|
9
|
+
| Frontend | React + Vite + Tailwind | **5180** |
|
|
10
|
+
| Backend | Express + Mongoose + express-session | **5560** |
|
|
11
|
+
| Database | MongoDB **VRRS** | — |
|
|
12
|
+
|
|
13
|
+
## Quick start
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
cd vrrs/backend && cp .env.example .env && npm install && npm run dev
|
|
17
|
+
cd vrrs/frontend && npm install && npm run dev
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
Open http://localhost:5180 — login: `admin` / `admin123`
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
| Feature | Implementation |
|
|
25
|
+
|---------|----------------|
|
|
26
|
+
| MongoDB database **VRRS** | `backend/config/db.js` |
|
|
27
|
+
| ERD with PK/FK | Below |
|
|
28
|
+
| Level 0 DFD | Below |
|
|
29
|
+
| CRUD + search | Customers, vehicles, reservations, users |
|
|
30
|
+
| Session login | Cookie `vrrs.sid`, `withCredentials` |
|
|
31
|
+
| Roles | admin, manager, staff |
|
|
32
|
+
| Report | `GET /api/reports/reservation-rental` |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Entity Relationship Diagram (ERD)
|
|
37
|
+
|
|
38
|
+
```mermaid
|
|
39
|
+
erDiagram
|
|
40
|
+
CUSTOMERS ||--o{ RESERVATION_RENTALS : "makes"
|
|
41
|
+
VEHICLES ||--o{ RESERVATION_RENTALS : "involves"
|
|
42
|
+
USERS ||--o{ RESERVATION_RENTALS : "records"
|
|
43
|
+
|
|
44
|
+
CUSTOMERS {
|
|
45
|
+
int customer_id PK
|
|
46
|
+
varchar full_name
|
|
47
|
+
varchar national_id UK
|
|
48
|
+
varchar phone
|
|
49
|
+
varchar email
|
|
50
|
+
varchar address
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
VEHICLES {
|
|
54
|
+
int vehicle_id PK
|
|
55
|
+
varchar plate_number UK
|
|
56
|
+
varchar brand
|
|
57
|
+
varchar model
|
|
58
|
+
int year
|
|
59
|
+
varchar vehicle_type
|
|
60
|
+
decimal purchase_price
|
|
61
|
+
enum status
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
RESERVATION_RENTALS {
|
|
65
|
+
int reservation_rental_id PK
|
|
66
|
+
date reservation_date
|
|
67
|
+
date start_date
|
|
68
|
+
date end_date
|
|
69
|
+
enum reservation_status
|
|
70
|
+
date rental_date
|
|
71
|
+
date return_date
|
|
72
|
+
decimal rental_fee
|
|
73
|
+
enum rental_status
|
|
74
|
+
int customer_id FK
|
|
75
|
+
int vehicle_id FK
|
|
76
|
+
int user_id FK
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
USERS {
|
|
80
|
+
int user_id PK
|
|
81
|
+
varchar user_name UK
|
|
82
|
+
varchar password
|
|
83
|
+
enum role
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Relationships
|
|
88
|
+
|
|
89
|
+
1. **Customer (1) — (M) Reservation_Rental**
|
|
90
|
+
2. **Vehicle (1) — (M) Reservation_Rental**
|
|
91
|
+
3. **User (1) — (M) Reservation_Rental**
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Level 0 DFD
|
|
96
|
+
|
|
97
|
+
External entities: **Customer**, **User**, **Manager**
|
|
98
|
+
|
|
99
|
+
| Process | Data stores |
|
|
100
|
+
|---------|-------------|
|
|
101
|
+
| 1.0 Manage Customers | D1 Customers |
|
|
102
|
+
| 2.0 Manage Vehicles | D2 Vehicles |
|
|
103
|
+
| 3.0 Manage Reservation/Rental | D1, D2, D3 |
|
|
104
|
+
| 4.0 Generate Reports | D1, D2, D3 |
|
|
105
|
+
| 5.0 User Authentication | D4 Users |
|
|
106
|
+
|
|
107
|
+
```mermaid
|
|
108
|
+
flowchart TB
|
|
109
|
+
Cust["Customer"]
|
|
110
|
+
User["User"]
|
|
111
|
+
Mgr["Manager"]
|
|
112
|
+
P1(("1.0 Manage Customers"))
|
|
113
|
+
P2(("2.0 Manage Vehicles"))
|
|
114
|
+
P3(("3.0 Manage Reservation/Rental"))
|
|
115
|
+
P4(("4.0 Generate Reports"))
|
|
116
|
+
P5(("5.0 Authentication"))
|
|
117
|
+
D1[("D1 Customers")]
|
|
118
|
+
D2[("D2 Vehicles")]
|
|
119
|
+
D3[("D3 Reservations")]
|
|
120
|
+
D4[("D4 Users")]
|
|
121
|
+
Rpt["Reservation Rental Report"]
|
|
122
|
+
|
|
123
|
+
Cust --> P1 --> D1
|
|
124
|
+
User --> P2 --> D2
|
|
125
|
+
User --> P3
|
|
126
|
+
P3 --> D1
|
|
127
|
+
P3 --> D2
|
|
128
|
+
P3 --> D3
|
|
129
|
+
User --> P5 --> D4
|
|
130
|
+
Mgr --> P4
|
|
131
|
+
D1 --> P4
|
|
132
|
+
D2 --> P4
|
|
133
|
+
D3 --> P4
|
|
134
|
+
P4 --> Rpt
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## API
|
|
140
|
+
|
|
141
|
+
| Method | Endpoint |
|
|
142
|
+
|--------|----------|
|
|
143
|
+
| POST | `/api/auth/login` |
|
|
144
|
+
| POST | `/api/auth/logout` |
|
|
145
|
+
| GET | `/api/auth/me` |
|
|
146
|
+
| CRUD | `/api/customers`, `/api/vehicles`, `/api/reservations` |
|
|
147
|
+
| GET | `*/search?q=` |
|
|
148
|
+
| CRUD | `/api/users` (admin) |
|
|
149
|
+
| GET | `/api/reports/reservation-rental` (manager/admin) — full report |
|
|
150
|
+
| GET | `/api/reports?startDate=&endDate=` (manager/admin) — report by date |
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## Project structure
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
vrrs/
|
|
158
|
+
├── README.md
|
|
159
|
+
├── backend/ ← MongoDB (database VRRS)
|
|
160
|
+
└── frontend/
|
|
161
|
+
```
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import mongoose from "mongoose";
|
|
2
|
+
import dotenv from "dotenv";
|
|
3
|
+
import User from "../models/User.js";
|
|
4
|
+
import Counter from "../models/Counter.js";
|
|
5
|
+
|
|
6
|
+
dotenv.config();
|
|
7
|
+
|
|
8
|
+
const ADMIN_HASH = "$2b$10$aULsUjp9bb9lf5CZZyY.7./KhwsocVO0duyPlqu0Qnte75xHBdG5C";
|
|
9
|
+
|
|
10
|
+
export const connectDatabase = async () => {
|
|
11
|
+
try {
|
|
12
|
+
await mongoose.connect(process.env.MONGO_URI || "mongodb://localhost:27017/VRRS");
|
|
13
|
+
console.log("Database Connected Successfully");
|
|
14
|
+
if ((await User.countDocuments()) === 0) {
|
|
15
|
+
await User.create({ user_id: 1, user_name: "admin", password: ADMIN_HASH, role: "admin" });
|
|
16
|
+
await Counter.findOneAndUpdate({ name: "user_id" }, { seq: 1 }, { upsert: true });
|
|
17
|
+
}
|
|
18
|
+
for (const name of ["customer_id", "vehicle_id", "reservation_rental_id", "user_id"]) {
|
|
19
|
+
await Counter.findOneAndUpdate(
|
|
20
|
+
{ name },
|
|
21
|
+
{ $setOnInsert: { seq: name === "user_id" ? 1 : 0 } },
|
|
22
|
+
{ upsert: true }
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.log("Database Connection Failed");
|
|
28
|
+
console.error(error.message);
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default mongoose;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export const VEHICLE_STATUSES = ["Available", "Reserved", "Rented", "Maintenance", "Sold"];
|
|
2
|
+
export const RESERVATION_STATUSES = ["Pending", "Confirmed", "Cancelled", "Completed"];
|
|
3
|
+
export const RENTAL_STATUSES = ["Not Started", "Active", "Returned", "Overdue"];
|
|
4
|
+
export const USER_ROLES = ["admin", "manager", "staff"];
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import bcrypt from "bcryptjs";
|
|
2
|
+
import User from "../models/User.js";
|
|
3
|
+
import { toAuthUser } from "../utils/authUser.js";
|
|
4
|
+
|
|
5
|
+
export const login = async (req, res) => {
|
|
6
|
+
try {
|
|
7
|
+
const { username, password } = req.body;
|
|
8
|
+
if (!username || !password) return res.status(400).json({ message: "Username and password are required." });
|
|
9
|
+
const user = await User.findOne({ user_name: username.trim() });
|
|
10
|
+
if (!user || !(await bcrypt.compare(password, user.password))) {
|
|
11
|
+
return res.status(401).json({ message: "Invalid credentials." });
|
|
12
|
+
}
|
|
13
|
+
const profile = toAuthUser(user);
|
|
14
|
+
req.session.user = profile;
|
|
15
|
+
return res.json({ message: "Login successful.", user: profile, auth: { session: true } });
|
|
16
|
+
} catch {
|
|
17
|
+
return res.status(500).json({ message: "Server error during login." });
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export const logout = (req, res) => {
|
|
22
|
+
req.session.destroy((err) => {
|
|
23
|
+
if (err) return res.status(500).json({ message: "Could not end session." });
|
|
24
|
+
res.clearCookie("vrrs.sid");
|
|
25
|
+
return res.json({ message: "Logged out successfully." });
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export const me = (req, res) => {
|
|
30
|
+
if (!req.session?.user) return res.status(401).json({ message: "Not authenticated." });
|
|
31
|
+
return res.json({ user: req.session.user });
|
|
32
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import Customer from "../models/Customer.js";
|
|
2
|
+
import ReservationRental from "../models/ReservationRental.js";
|
|
3
|
+
import { nextId } from "../utils/ids.js";
|
|
4
|
+
|
|
5
|
+
const strip = (d) => {
|
|
6
|
+
const o = d.toObject ? d.toObject() : d;
|
|
7
|
+
const { _id, __v, ...r } = o;
|
|
8
|
+
return r;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const create = async (req, res) => {
|
|
12
|
+
try {
|
|
13
|
+
const { fullName, nationalId, phone, email, address } = req.body;
|
|
14
|
+
if (!fullName?.trim() || !nationalId?.trim() || !phone?.trim() || !email?.trim() || !address?.trim()) {
|
|
15
|
+
return res.status(400).json({ message: "All customer fields are required." });
|
|
16
|
+
}
|
|
17
|
+
await Customer.create({
|
|
18
|
+
customer_id: await nextId("customer_id"),
|
|
19
|
+
full_name: fullName.trim(),
|
|
20
|
+
national_id: nationalId.trim(),
|
|
21
|
+
phone: phone.trim(),
|
|
22
|
+
email: email.trim(),
|
|
23
|
+
address: address.trim(),
|
|
24
|
+
});
|
|
25
|
+
return res.status(201).json({ message: "Customer added successfully." });
|
|
26
|
+
} catch (e) {
|
|
27
|
+
if (e.code === 11000) return res.status(409).json({ message: "National ID already exists." });
|
|
28
|
+
return res.status(500).json({ message: "Failed to add customer." });
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const getAll = async (_req, res) => {
|
|
33
|
+
try {
|
|
34
|
+
return res.json((await Customer.find().sort({ customer_id: -1 }).lean()).map(strip));
|
|
35
|
+
} catch {
|
|
36
|
+
return res.status(500).json({ message: "Failed to fetch customers." });
|
|
37
|
+
}
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export const search = async (req, res) => {
|
|
41
|
+
try {
|
|
42
|
+
const q = (req.query.q || "").trim();
|
|
43
|
+
if (!q) return getAll(req, res);
|
|
44
|
+
const re = new RegExp(q, "i");
|
|
45
|
+
return res.json(
|
|
46
|
+
(
|
|
47
|
+
await Customer.find({
|
|
48
|
+
$or: [{ full_name: re }, { national_id: re }, { phone: re }, { email: re }],
|
|
49
|
+
})
|
|
50
|
+
.sort({ customer_id: -1 })
|
|
51
|
+
.lean()
|
|
52
|
+
).map(strip)
|
|
53
|
+
);
|
|
54
|
+
} catch {
|
|
55
|
+
return res.status(500).json({ message: "Failed to search customers." });
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const getById = async (req, res) => {
|
|
60
|
+
try {
|
|
61
|
+
const doc = await Customer.findOne({ customer_id: Number(req.params.id) }).lean();
|
|
62
|
+
if (!doc) return res.status(404).json({ message: "Customer not found." });
|
|
63
|
+
return res.json(strip(doc));
|
|
64
|
+
} catch {
|
|
65
|
+
return res.status(500).json({ message: "Failed to fetch customer." });
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
export const update = async (req, res) => {
|
|
70
|
+
try {
|
|
71
|
+
const { fullName, nationalId, phone, email, address } = req.body;
|
|
72
|
+
const doc = await Customer.findOneAndUpdate(
|
|
73
|
+
{ customer_id: Number(req.params.id) },
|
|
74
|
+
{
|
|
75
|
+
full_name: fullName?.trim(),
|
|
76
|
+
national_id: nationalId?.trim(),
|
|
77
|
+
phone: phone?.trim(),
|
|
78
|
+
email: email?.trim(),
|
|
79
|
+
address: address?.trim(),
|
|
80
|
+
},
|
|
81
|
+
{ new: true }
|
|
82
|
+
);
|
|
83
|
+
if (!doc) return res.status(404).json({ message: "Customer not found." });
|
|
84
|
+
return res.json({ message: "Customer updated successfully." });
|
|
85
|
+
} catch (e) {
|
|
86
|
+
if (e.code === 11000) return res.status(409).json({ message: "National ID already exists." });
|
|
87
|
+
return res.status(500).json({ message: "Failed to update customer." });
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
|
|
91
|
+
export const remove = async (req, res) => {
|
|
92
|
+
try {
|
|
93
|
+
const id = Number(req.params.id);
|
|
94
|
+
if (await ReservationRental.findOne({ customer_id: id })) {
|
|
95
|
+
return res.status(409).json({ message: "Cannot delete: customer has reservations/rentals." });
|
|
96
|
+
}
|
|
97
|
+
const doc = await Customer.findOneAndDelete({ customer_id: id });
|
|
98
|
+
if (!doc) return res.status(404).json({ message: "Customer not found." });
|
|
99
|
+
return res.json({ message: "Customer deleted successfully." });
|
|
100
|
+
} catch {
|
|
101
|
+
return res.status(500).json({ message: "Failed to delete customer." });
|
|
102
|
+
}
|
|
103
|
+
};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import Customer from "../models/Customer.js";
|
|
2
|
+
import Vehicle from "../models/Vehicle.js";
|
|
3
|
+
import ReservationRental from "../models/ReservationRental.js";
|
|
4
|
+
|
|
5
|
+
const fmt = (d) => {
|
|
6
|
+
if (!d) return null;
|
|
7
|
+
const date = d instanceof Date ? d : new Date(d);
|
|
8
|
+
if (!Number.isNaN(date.getTime())) return date.toISOString().slice(0, 10);
|
|
9
|
+
const s = String(d);
|
|
10
|
+
return /^\d{4}-\d{2}-\d{2}/.test(s) ? s.slice(0, 10) : null;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const inRange = (dateStr, start, end) => {
|
|
14
|
+
if (!dateStr) return false;
|
|
15
|
+
const d = fmt(dateStr);
|
|
16
|
+
return d >= start && d <= end;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
async function buildReportRows(filterFn = null) {
|
|
20
|
+
const rows = await ReservationRental.find().sort({ reservation_rental_id: -1 }).lean();
|
|
21
|
+
const customers = Object.fromEntries((await Customer.find().lean()).map((c) => [c.customer_id, c]));
|
|
22
|
+
const vehicles = Object.fromEntries((await Vehicle.find().lean()).map((v) => [v.vehicle_id, v]));
|
|
23
|
+
const filtered = filterFn ? rows.filter(filterFn) : rows;
|
|
24
|
+
return filtered.map((r) => {
|
|
25
|
+
const c = customers[r.customer_id] || {};
|
|
26
|
+
const v = vehicles[r.vehicle_id] || {};
|
|
27
|
+
return {
|
|
28
|
+
customer_full_name: c.full_name,
|
|
29
|
+
national_id: c.national_id,
|
|
30
|
+
phone_number: c.phone,
|
|
31
|
+
vehicle_plate_number: v.plate_number,
|
|
32
|
+
vehicle_brand: v.brand,
|
|
33
|
+
vehicle_model: v.model,
|
|
34
|
+
vehicle_year: v.year,
|
|
35
|
+
vehicle_type: v.vehicle_type,
|
|
36
|
+
reservation_date: fmt(r.reservation_date),
|
|
37
|
+
rental_start_date: fmt(r.start_date),
|
|
38
|
+
rental_end_date: fmt(r.end_date),
|
|
39
|
+
reservation_status: r.reservation_status,
|
|
40
|
+
rental_date: fmt(r.rental_date),
|
|
41
|
+
return_date: fmt(r.return_date),
|
|
42
|
+
rental_fee: r.rental_fee,
|
|
43
|
+
rental_status: r.rental_status,
|
|
44
|
+
reservation_rental_id: r.reservation_rental_id,
|
|
45
|
+
};
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export const getReservationRentalReport = async (_req, res) => {
|
|
50
|
+
try {
|
|
51
|
+
const report = await buildReportRows();
|
|
52
|
+
return res.json({
|
|
53
|
+
reportTitle: "Customer Vehicle Reservation Rental Report",
|
|
54
|
+
company: "SwitchWheels Enterprise — Huye",
|
|
55
|
+
totalRecords: report.length,
|
|
56
|
+
rows: report,
|
|
57
|
+
});
|
|
58
|
+
} catch {
|
|
59
|
+
return res.status(500).json({ message: "Failed to generate report." });
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const getReportByDate = async (req, res) => {
|
|
64
|
+
try {
|
|
65
|
+
const { startDate, endDate } = req.query;
|
|
66
|
+
if (!startDate || !endDate) {
|
|
67
|
+
return res.status(400).json({ message: "Start date and end date are required." });
|
|
68
|
+
}
|
|
69
|
+
if (startDate > endDate) {
|
|
70
|
+
return res.status(400).json({ message: "Start date must be before or equal to end date." });
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
const report = await buildReportRows(
|
|
74
|
+
(r) => inRange(r.reservation_date, startDate, endDate) || inRange(r.start_date, startDate, endDate)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
return res.json({
|
|
78
|
+
reportTitle: "Reservation & Rental Report by Date",
|
|
79
|
+
company: "SwitchWheels Enterprise — Huye",
|
|
80
|
+
startDate,
|
|
81
|
+
endDate,
|
|
82
|
+
totalRecords: report.length,
|
|
83
|
+
rows: report,
|
|
84
|
+
});
|
|
85
|
+
} catch {
|
|
86
|
+
return res.status(500).json({ message: "Failed to generate report." });
|
|
87
|
+
}
|
|
88
|
+
};
|