feat: add issue kanban/attachments/deadlines, dashboard widget DnD, and checklisten system
This commit is contained in:
163
backend/src/routes/checklist.routes.ts
Normal file
163
backend/src/routes/checklist.routes.ts
Normal file
@@ -0,0 +1,163 @@
|
||||
import { Router } from 'express';
|
||||
import checklistController from '../controllers/checklist.controller';
|
||||
import { authenticate } from '../middleware/auth.middleware';
|
||||
import { requirePermission } from '../middleware/rbac.middleware';
|
||||
|
||||
const router = Router();
|
||||
|
||||
// --- Fälligkeiten (before /:id routes) ---
|
||||
router.get(
|
||||
'/faellig',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getOverdueChecklists.bind(checklistController)
|
||||
);
|
||||
|
||||
// --- Vorlagen (Templates) ---
|
||||
router.get(
|
||||
'/vorlagen',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getVorlagen.bind(checklistController)
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/vorlagen',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.createVorlage.bind(checklistController)
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/vorlagen/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getVorlageById.bind(checklistController)
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/vorlagen/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.updateVorlage.bind(checklistController)
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/vorlagen/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.deleteVorlage.bind(checklistController)
|
||||
);
|
||||
|
||||
// --- Vorlage Items ---
|
||||
router.get(
|
||||
'/vorlagen/:id/items',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getVorlageItems.bind(checklistController)
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/vorlagen/:id/items',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.addVorlageItem.bind(checklistController)
|
||||
);
|
||||
|
||||
// Item-level routes (not nested under vorlage)
|
||||
router.put(
|
||||
'/items/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.updateVorlageItem.bind(checklistController)
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/items/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.deleteVorlageItem.bind(checklistController)
|
||||
);
|
||||
|
||||
// --- Vehicle-specific items ---
|
||||
router.get(
|
||||
'/fahrzeug/:fahrzeugId/items',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getVehicleItems.bind(checklistController)
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/fahrzeug/:fahrzeugId/items',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.addVehicleItem.bind(checklistController)
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/fahrzeug-items/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.updateVehicleItem.bind(checklistController)
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/fahrzeug-items/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
checklistController.deleteVehicleItem.bind(checklistController)
|
||||
);
|
||||
|
||||
// --- Applicable checklists for a vehicle ---
|
||||
router.get(
|
||||
'/fahrzeug/:fahrzeugId/checklisten',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getTemplatesForVehicle.bind(checklistController)
|
||||
);
|
||||
|
||||
// --- Vehicle due dates ---
|
||||
router.get(
|
||||
'/fahrzeug/:fahrzeugId/faellig',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getDueChecklists.bind(checklistController)
|
||||
);
|
||||
|
||||
// --- Ausführungen (Executions) ---
|
||||
router.get(
|
||||
'/ausfuehrungen',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getExecutions.bind(checklistController)
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/ausfuehrungen',
|
||||
authenticate,
|
||||
requirePermission('checklisten:execute'),
|
||||
checklistController.startExecution.bind(checklistController)
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/ausfuehrungen/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:view'),
|
||||
checklistController.getExecutionById.bind(checklistController)
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/ausfuehrungen/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:execute'),
|
||||
checklistController.submitExecution.bind(checklistController)
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/ausfuehrungen/:id/freigabe',
|
||||
authenticate,
|
||||
requirePermission('checklisten:approve'),
|
||||
checklistController.approveExecution.bind(checklistController)
|
||||
);
|
||||
|
||||
export default router;
|
||||
58
backend/src/routes/fahrzeugTyp.routes.ts
Normal file
58
backend/src/routes/fahrzeugTyp.routes.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
import { Router } from 'express';
|
||||
import fahrzeugTypController from '../controllers/fahrzeugTyp.controller';
|
||||
import { authenticate } from '../middleware/auth.middleware';
|
||||
import { requirePermission } from '../middleware/rbac.middleware';
|
||||
|
||||
const router = Router();
|
||||
|
||||
// List all vehicle types
|
||||
router.get(
|
||||
'/',
|
||||
authenticate,
|
||||
fahrzeugTypController.getAll.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
// Get single vehicle type
|
||||
router.get(
|
||||
'/:id',
|
||||
authenticate,
|
||||
fahrzeugTypController.getById.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
// CRUD — admin-only
|
||||
router.post(
|
||||
'/',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
fahrzeugTypController.create.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
router.patch(
|
||||
'/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
fahrzeugTypController.update.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
router.delete(
|
||||
'/:id',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
fahrzeugTypController.delete.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
// Vehicle-specific type management
|
||||
router.get(
|
||||
'/vehicle/:fahrzeugId',
|
||||
authenticate,
|
||||
fahrzeugTypController.getTypesForVehicle.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
router.put(
|
||||
'/vehicle/:fahrzeugId',
|
||||
authenticate,
|
||||
requirePermission('checklisten:manage_templates'),
|
||||
fahrzeugTypController.setTypesForVehicle.bind(fahrzeugTypController)
|
||||
);
|
||||
|
||||
export default router;
|
||||
@@ -2,6 +2,7 @@ import { Router } from 'express';
|
||||
import issueController from '../controllers/issue.controller';
|
||||
import { authenticate } from '../middleware/auth.middleware';
|
||||
import { requirePermission } from '../middleware/rbac.middleware';
|
||||
import { uploadIssue } from '../middleware/upload';
|
||||
|
||||
const router = Router();
|
||||
|
||||
@@ -60,6 +61,13 @@ router.get(
|
||||
issueController.getMembers.bind(issueController)
|
||||
);
|
||||
|
||||
// --- File management (BEFORE /:id to avoid conflict) ---
|
||||
router.delete(
|
||||
'/files/:fileId',
|
||||
authenticate,
|
||||
issueController.deleteFile.bind(issueController)
|
||||
);
|
||||
|
||||
// --- Issue CRUD ---
|
||||
router.get(
|
||||
'/',
|
||||
@@ -92,6 +100,19 @@ router.post(
|
||||
issueController.addComment.bind(issueController)
|
||||
);
|
||||
|
||||
router.post(
|
||||
'/:id/files',
|
||||
authenticate,
|
||||
uploadIssue.single('file'),
|
||||
issueController.uploadFile.bind(issueController)
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/:id/files',
|
||||
authenticate,
|
||||
issueController.getFiles.bind(issueController)
|
||||
);
|
||||
|
||||
router.get(
|
||||
'/:id',
|
||||
authenticate,
|
||||
|
||||
Reference in New Issue
Block a user