Ajustes de estructura
This commit is contained in:
@@ -251,36 +251,60 @@ export function registerUploadRecordImageTool(server) {
|
||||
);
|
||||
if (validationError) return validationError;
|
||||
|
||||
const credentials = await getSessionCredentials(extra.sessionId);
|
||||
const projectSlug = path.basename(resolveCurrentProjectDir());
|
||||
let result;
|
||||
|
||||
// Step 1: Delete old upload
|
||||
await mcpPost(
|
||||
credentials,
|
||||
"deleteRecordUpload",
|
||||
{ uploadId },
|
||||
credentials.token,
|
||||
credentials.tokenHash
|
||||
);
|
||||
try {
|
||||
// Paso 1: borrar upload viejo via Python (incluye sync de borrado a produccion).
|
||||
await pythonPost("/api/cms/delete-upload", {
|
||||
project: projectSlug,
|
||||
uploadId,
|
||||
table: tableName,
|
||||
});
|
||||
|
||||
// Step 2: Upload new image
|
||||
// Si la URL es local, descargar y enviar base64 (el servidor remoto no
|
||||
// puede descargarla en modo produccion).
|
||||
const localFile = await resolveLocalImageAsBase64(imageUrl);
|
||||
const uploadPayload = localFile
|
||||
? { tableName, recordId, fieldName, alt, fileBase64: localFile.fileBase64, fileName: localFile.fileName }
|
||||
: { tableName, recordId, fieldName, imageUrl, alt };
|
||||
// Paso 2: subir el nuevo via Python (incluye sync a produccion + truncado local).
|
||||
result = await pythonPost("/api/cms/upload-to-field", {
|
||||
project: projectSlug,
|
||||
table: tableName,
|
||||
num: recordId,
|
||||
field: fieldName,
|
||||
imageUrl: imageUrl,
|
||||
});
|
||||
} catch (pyErr) {
|
||||
// Fallback al flujo directo PHP solo cuando el Python no es accesible.
|
||||
// En este path queda el bug original (sin sync a produccion en modo test),
|
||||
// pero es preferible a fallar el tool entero.
|
||||
console.error(`[replace_record_image] Python server failed (${pyErr.message}), falling back to PHP direct`);
|
||||
const credentials = await getSessionCredentials(extra.sessionId);
|
||||
await mcpPost(
|
||||
credentials,
|
||||
"deleteRecordUpload",
|
||||
{ uploadId },
|
||||
credentials.token,
|
||||
credentials.tokenHash
|
||||
);
|
||||
const localFile = await resolveLocalImageAsBase64(imageUrl);
|
||||
const uploadPayload = localFile
|
||||
? { tableName, recordId, fieldName, alt, fileBase64: localFile.fileBase64, fileName: localFile.fileName }
|
||||
: { tableName, recordId, fieldName, imageUrl, alt };
|
||||
const response = await mcpPost(
|
||||
credentials,
|
||||
"uploadRecordImage",
|
||||
uploadPayload,
|
||||
credentials.token,
|
||||
credentials.tokenHash
|
||||
);
|
||||
const apiError = handleApiResponse(response.data, 'replace_record_image');
|
||||
if (apiError) return apiError;
|
||||
result = { success: true, data: response.data };
|
||||
}
|
||||
|
||||
const response = await mcpPost(
|
||||
credentials,
|
||||
"uploadRecordImage",
|
||||
uploadPayload,
|
||||
credentials.token,
|
||||
credentials.tokenHash
|
||||
);
|
||||
|
||||
const apiError = handleApiResponse(response.data, 'replace_record_image');
|
||||
if (apiError) return apiError;
|
||||
if (!result?.success && !result?.data?.success) {
|
||||
const errMsg = result?.error || result?.data?.error || "Unknown error";
|
||||
return { content: [{ type: "text", text: JSON.stringify({ error: errMsg }, null, 2) }], isError: true };
|
||||
}
|
||||
|
||||
const replaceData = result.data || result;
|
||||
return {
|
||||
content: [{
|
||||
type: "text",
|
||||
@@ -291,7 +315,7 @@ export function registerUploadRecordImageTool(server) {
|
||||
recordId,
|
||||
fieldName,
|
||||
replacedUploadId: uploadId,
|
||||
...response.data
|
||||
...replaceData,
|
||||
}, null, 2)
|
||||
}],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user