diff --git a/index.cfm b/index.cfm
index 66f65ec..ef3e648 100644
--- a/index.cfm
+++ b/index.cfm
@@ -75,7 +75,7 @@

-
Сверка договоров — LLM AI-driven Event Sourcing v1.0.121 — Lucee
+
Сверка договоров — LLM AI-driven Event Sourcing v1.0.122 — Lucee
@@ -176,7 +176,6 @@ lucide.createIcons();
var UPLOAD_URL = 'https://contracts.kube5s.ru/lucee/upload.cfm';
var CONVERT_URL = 'https://contracts.kube5s.ru/convert-doc';
-var UNZIP_URL = 'https://contracts.kube5s.ru/unzip-upload';
var SITE_URL = ''; // same origin for api calls
var fileInput = document.getElementById('fileInput');
@@ -259,9 +258,19 @@ fileInput.addEventListener('change', async function() {
renderTable();
try {
- var zipResp = await fetch(UNZIP_URL, {
+ // Читаем ZIP через FileReader → base64
+ var zipData = await new Promise(function(resolve, reject) {
+ var reader = new FileReader();
+ reader.onload = function() { resolve(reader.result); };
+ reader.onerror = function() { reject(new Error('FileReader failed')); };
+ reader.readAsDataURL(f);
+ });
+ var zipB64 = zipData.split(',')[1]; // убрать префикс data:application/zip;base64,
+
+ var zipResp = await fetch('/unzip.cfm', {
method: 'POST',
- body: (function() { var fd = new FormData(); fd.append('file', f); return fd; })()
+ headers: {'Content-Type': 'application/json'},
+ body: JSON.stringify({filename: f.name, data: zipB64, contract_id: contractId || ''})
});
var zipData = await zipResp.json();
if (!zipData.ok || !zipData.files) throw new Error('unzip failed');
diff --git a/unzip.cfm b/unzip.cfm
new file mode 100644
index 0000000..7f9445c
--- /dev/null
+++ b/unzip.cfm
@@ -0,0 +1,116 @@
+
+
+
+
+ {"ok":false,"error":"POST required"}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT s.id as sid, s.document_id FROM supplements s
+ JOIN documents d ON d.id = s.document_id
+ WHERE s.contract_id =
+ AND d.filename =
+
+
+ DELETE FROM supplements WHERE id =
+ DELETE FROM documents WHERE id =
+
+
+
+ INSERT INTO documents (filename, mime_type, original_bytes, status) VALUES (
+ ,
+ ,
+ decode(, 'hex'),
+ 'uploaded'
+ )
+
+
+ SELECT id FROM documents WHERE filename= AND status='uploaded' ORDER BY created_at DESC LIMIT 1
+
+
+
+ INSERT INTO contracts (number, client) VALUES (,'')
+
+
+ SELECT id FROM contracts ORDER BY created_at DESC LIMIT 1
+
+
+
+
+ INSERT INTO supplements (contract_id, document_id, type) VALUES (
+ ,
+ ,
+
+ )
+
+
+
+
+
+
+
+
+
+
+
+
+
+#serializeJSON(result)#