getRouteParam('knowledgeId'); $documentId = $request->getRouteParam('documentId'); $data = $request->getParsedBody(); if (!$knowledgeId || !$documentId) { throw new BadRequest('Knowledge ID and Document ID are required'); } $pdo = $this->entityManager->getPDO(); // Build dynamic UPDATE SET clause $setClauses = []; $params = [ 'knowledgeId' => $knowledgeId, 'documentId' => $documentId ]; if (isset($data->aiDocumentId)) { $setClauses[] = "ai_document_id = :aiDocumentId"; $params['aiDocumentId'] = $data->aiDocumentId; } if (isset($data->syncstatus)) { $allowedStatuses = ['new', 'unclean', 'synced', 'failed', 'unsupported']; if (!in_array($data->syncstatus, $allowedStatuses)) { throw new BadRequest('Invalid syncstatus value. Allowed: ' . implode(', ', $allowedStatuses)); } $setClauses[] = "syncstatus = :syncstatus"; $params['syncstatus'] = $data->syncstatus; } if (isset($data->lastSync)) { $setClauses[] = "last_sync = :lastSync"; $params['lastSync'] = $data->lastSync; } elseif (isset($data->updateLastSync) && $data->updateLastSync === true) { $setClauses[] = "last_sync = NOW()"; } if (empty($setClauses)) { throw new BadRequest('No fields to update. Provide at least one of: aiDocumentId, syncstatus, lastSync'); } $sql = " UPDATE c_a_i_knowledge_dokumente SET " . implode(', ', $setClauses) . " WHERE c_a_i_knowledge_id = :knowledgeId AND c_dokumente_id = :documentId AND deleted = 0 "; $sth = $pdo->prepare($sql); $sth->execute($params); $affectedRows = $sth->rowCount(); if ($affectedRows === 0) { throw new NotFound('Junction entry not found or no changes made'); } // Return updated data $result = $this->getJunctionEntry($knowledgeId, $documentId); return ResponseComposer::json($result); } private function getJunctionEntry(string $knowledgeId, string $documentId): array { $pdo = $this->entityManager->getPDO(); $sql = " SELECT id as junctionId, c_a_i_knowledge_id as cAIKnowledgeId, c_dokumente_id as cDokumenteId, ai_document_id as aiDocumentId, syncstatus, last_sync as lastSync FROM c_a_i_knowledge_dokumente WHERE c_a_i_knowledge_id = :knowledgeId AND c_dokumente_id = :documentId AND deleted = 0 "; $sth = $pdo->prepare($sql); $sth->execute([ 'knowledgeId' => $knowledgeId, 'documentId' => $documentId ]); $result = $sth->fetch(\PDO::FETCH_ASSOC); if (!$result) { throw new NotFound('Junction entry not found'); } return $result; } }