connect_error) { ResponseHelper::serverError('Database connection failed'); } try { $dependencyModel = new DependencyModel($conn); $auditLog = new AuditLogModel($conn); } catch (Exception $e) { ResponseHelper::serverError('Failed to initialize models: ' . $e->getMessage()); } $method = $_SERVER['REQUEST_METHOD']; try { switch ($method) { case 'GET': // Get dependencies for a ticket $ticketId = $_GET['ticket_id'] ?? null; if (!$ticketId) { ResponseHelper::error('Ticket ID required'); } try { $dependencies = $dependencyModel->getDependencies($ticketId); $dependents = $dependencyModel->getDependentTickets($ticketId); } catch (Exception $e) { ResponseHelper::serverError('Query error: ' . $e->getMessage()); } ResponseHelper::success([ 'dependencies' => $dependencies, 'dependents' => $dependents ]); break; case 'POST': // Add a new dependency $data = json_decode(file_get_contents('php://input'), true); $ticketId = $data['ticket_id'] ?? null; $dependsOnId = $data['depends_on_id'] ?? null; $type = $data['dependency_type'] ?? 'blocks'; if (!$ticketId || !$dependsOnId) { ResponseHelper::error('Both ticket_id and depends_on_id are required'); } $result = $dependencyModel->addDependency($ticketId, $dependsOnId, $type, $userId); if ($result['success']) { // Log to audit $auditLog->log($userId, 'create', 'dependency', (string)$result['dependency_id'], [ 'ticket_id' => $ticketId, 'depends_on_id' => $dependsOnId, 'type' => $type ]); ResponseHelper::created($result); } else { ResponseHelper::error($result['error']); } break; case 'DELETE': // Remove a dependency $data = json_decode(file_get_contents('php://input'), true); $dependencyId = $data['dependency_id'] ?? null; // Alternative: delete by ticket IDs if (!$dependencyId && isset($data['ticket_id']) && isset($data['depends_on_id'])) { $ticketId = $data['ticket_id']; $dependsOnId = $data['depends_on_id']; $type = $data['dependency_type'] ?? 'blocks'; $result = $dependencyModel->removeDependencyByTickets($ticketId, $dependsOnId, $type); if ($result) { $auditLog->log($userId, 'delete', 'dependency', null, [ 'ticket_id' => $ticketId, 'depends_on_id' => $dependsOnId, 'type' => $type ]); ResponseHelper::success([], 'Dependency removed'); } else { ResponseHelper::error('Failed to remove dependency'); } } elseif ($dependencyId) { $result = $dependencyModel->removeDependency($dependencyId); if ($result) { $auditLog->log($userId, 'delete', 'dependency', (string)$dependencyId); ResponseHelper::success([], 'Dependency removed'); } else { ResponseHelper::error('Failed to remove dependency'); } } else { ResponseHelper::error('Dependency ID or ticket IDs required'); } break; default: ResponseHelper::error('Method not allowed', 405); } } catch (Exception $e) { ResponseHelper::serverError('An error occurred: ' . $e->getMessage()); } $conn->close();