v1.0.174: /api/sync — БД = зеркало таблицы, удаление ВСЕГО кроме keep_ids
This commit is contained in:
+17
-21
@@ -13,12 +13,22 @@ var fileQueue = [];
|
||||
var contractId = null;
|
||||
var batchId = crypto.randomUUID(); // классификация: привязка всех файлов сессии
|
||||
|
||||
// Автоочистка старых записей без batch_id при загрузке страницы
|
||||
// Автоочистка старых записей при загрузке страницы
|
||||
(async function cleanup() {
|
||||
try {
|
||||
await fetch(VM_API + '/api/cleanup?batch=' + batchId, { method: 'POST' });
|
||||
await fetch(VM_API + '/api/cleanup', { method: 'POST' });
|
||||
} catch(e) { /* ignore */ }
|
||||
})();
|
||||
|
||||
// Синхронизация БД с таблицей — удалить всё, чего нет в fileQueue
|
||||
function syncDB() {
|
||||
var keepIds = fileQueue.map(function(f) { return f.doc_id; }).filter(Boolean);
|
||||
fetch(VM_API + '/api/sync', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({keep_ids: keepIds})
|
||||
}).catch(function(){});
|
||||
}
|
||||
// Утилиты (formatSize, formatDate, moveUp, moveDown, escHtml, fmtDate) —
|
||||
// вынесены в app_utils.js для облегчения анализа и отладки.
|
||||
|
||||
@@ -51,19 +61,12 @@ fileInput.addEventListener('change', async function() {
|
||||
|
||||
// Удалить из очереди файлы, которых нет в новом выборе
|
||||
var newNames = new Set(newFiles.map(function(f) { return f.name; }));
|
||||
var removed = [];
|
||||
fileQueue = fileQueue.filter(function(f) {
|
||||
if (!newNames.has(f.name)) { removed.push(f); return false; }
|
||||
return true;
|
||||
return newNames.has(f.name);
|
||||
});
|
||||
// Удалить с сервера то, что убрали из таблицы
|
||||
for (var ri = 0; ri < removed.length; ri++) {
|
||||
var rf = removed[ri];
|
||||
if (rf.doc_id) {
|
||||
fetch(VM_API + '/api/documents/' + rf.doc_id + '?contract_id=' + (contractId||''), { method: 'DELETE' }).catch(function(){});
|
||||
}
|
||||
}
|
||||
renderTable();
|
||||
// Разблокировать кнопку классификации — состав файлов изменился
|
||||
showClassifyBtn();
|
||||
|
||||
for (var i = 0; i < newFiles.length; i++) {
|
||||
var f = newFiles[i];
|
||||
@@ -184,15 +187,8 @@ fileInput.addEventListener('change', async function() {
|
||||
|
||||
await refreshSupps();
|
||||
|
||||
// Удалить с сервера мусор — документы этого батча, которых нет в таблице
|
||||
if (batchId) {
|
||||
var keepIds = fileQueue.map(function(f) { return f.doc_id; }).filter(Boolean);
|
||||
fetch(VM_API + '/api/sync-batch', {
|
||||
method: 'POST',
|
||||
headers: {'Content-Type': 'application/json'},
|
||||
body: JSON.stringify({batch_id: batchId, keep_ids: keepIds})
|
||||
}).catch(function(){});
|
||||
}
|
||||
// Синхронизировать БД с таблицей — удалить всё, чего нет в fileQueue
|
||||
syncDB();
|
||||
|
||||
fileInput.value = '';
|
||||
fileInput.disabled = false;
|
||||
|
||||
Reference in New Issue
Block a user