134 lines
3.1 KiB
TypeScript
134 lines
3.1 KiB
TypeScript
import { Router } from 'express';
|
|
import * as contractTaskController from '../controllers/contractTask.controller.js';
|
|
import { authenticate, requirePermission } from '../middleware/auth.js';
|
|
|
|
const router = Router();
|
|
|
|
// ==================== ALL TASKS (vertragsübergreifend) ====================
|
|
|
|
// Alle Aufgaben über alle Verträge (für Dashboard & Task-Liste)
|
|
router.get(
|
|
'/tasks',
|
|
authenticate,
|
|
requirePermission('contracts:read'),
|
|
contractTaskController.getAllTasks
|
|
);
|
|
|
|
// Task-Statistik (offene Aufgaben)
|
|
router.get(
|
|
'/tasks/stats',
|
|
authenticate,
|
|
requirePermission('contracts:read'),
|
|
contractTaskController.getTaskStats
|
|
);
|
|
|
|
// ==================== TASKS BY CONTRACT ====================
|
|
|
|
// Alle Aufgaben eines Vertrags abrufen (auch für Kundenportal, aber nur sichtbare)
|
|
router.get(
|
|
'/contracts/:contractId/tasks',
|
|
authenticate,
|
|
requirePermission('contracts:read'),
|
|
contractTaskController.getTasks
|
|
);
|
|
|
|
// Neue Aufgabe erstellen (nur für Mitarbeiter mit contracts:update)
|
|
router.post(
|
|
'/contracts/:contractId/tasks',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.createTask
|
|
);
|
|
|
|
// Support-Anfrage erstellen (für Kundenportal-Benutzer, nur contracts:read erforderlich)
|
|
router.post(
|
|
'/contracts/:contractId/support-ticket',
|
|
authenticate,
|
|
requirePermission('contracts:read'),
|
|
contractTaskController.createSupportTicket
|
|
);
|
|
|
|
// Aufgabe aktualisieren
|
|
router.put(
|
|
'/tasks/:taskId',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.updateTask
|
|
);
|
|
|
|
// Aufgabe als erledigt markieren
|
|
router.post(
|
|
'/tasks/:taskId/complete',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.completeTask
|
|
);
|
|
|
|
// Aufgabe wieder öffnen
|
|
router.post(
|
|
'/tasks/:taskId/reopen',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.reopenTask
|
|
);
|
|
|
|
// Aufgabe löschen
|
|
router.delete(
|
|
'/tasks/:taskId',
|
|
authenticate,
|
|
requirePermission('contracts:delete'),
|
|
contractTaskController.deleteTask
|
|
);
|
|
|
|
// ==================== SUBTASKS ====================
|
|
|
|
// Neue Unteraufgabe erstellen (Mitarbeiter)
|
|
router.post(
|
|
'/tasks/:taskId/subtasks',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.createSubtask
|
|
);
|
|
|
|
// Antwort auf eigenes Ticket erstellen (Kundenportal)
|
|
router.post(
|
|
'/tasks/:taskId/reply',
|
|
authenticate,
|
|
requirePermission('contracts:read'),
|
|
contractTaskController.createCustomerReply
|
|
);
|
|
|
|
// Unteraufgabe als erledigt markieren
|
|
router.post(
|
|
'/subtasks/:subtaskId/complete',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.completeSubtask
|
|
);
|
|
|
|
// Unteraufgabe wieder öffnen
|
|
router.post(
|
|
'/subtasks/:subtaskId/reopen',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.reopenSubtask
|
|
);
|
|
|
|
// Unteraufgabe aktualisieren
|
|
router.put(
|
|
'/subtasks/:subtaskId',
|
|
authenticate,
|
|
requirePermission('contracts:update'),
|
|
contractTaskController.updateSubtask
|
|
);
|
|
|
|
// Unteraufgabe löschen
|
|
router.delete(
|
|
'/subtasks/:subtaskId',
|
|
authenticate,
|
|
requirePermission('contracts:delete'),
|
|
contractTaskController.deleteSubtask
|
|
);
|
|
|
|
export default router;
|