From 993323c0baec595a18693ff202671f0cecc0a11c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Tue, 16 Jun 2026 15:19:09 +0400 Subject: [PATCH] =?UTF-8?q?session-05:=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE=20=D1=88=D0=B0=D0=B3=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?=206-8=20(=D1=82=D0=B0=D0=B9=D0=BC=D0=B0=D1=83=D1=82,=20findRow?= =?UTF-8?q?ByName,=20=D0=B1=D0=B0=D0=B3=D0=B8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- History/session-05-sse-parsing.md | 50 +++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/History/session-05-sse-parsing.md b/History/session-05-sse-parsing.md index b82796f..9e6ca02 100644 --- a/History/session-05-sse-parsing.md +++ b/History/session-05-sse-parsing.md @@ -1,8 +1,8 @@ # Сессия #5 — SSE-парсинг, интерактивный прогресс, отказ от LLM _Дата: 2026-06-16_ -_Версия: v1.0 → v1.5 (5 повышений)_ -_Коммиты: fa4c7fe → 435f617 (6 шт.)_ +_Версия: v1.0 → v1.8 (8 повышений)_ +_Коммиты: fa4c7fe → e0c58fc (8 шт.)_ --- @@ -111,3 +111,49 @@ _parse(): 3. **ZIP требует особой обработки.** Недостаточно просто распарсить — нужно создать документы для каждого файла внутри. 4. **Имена должны совпадать** между клиентом (JSZip) и сервером (zipfile) — иначе `findRowByName` не находит строку. 5. **`replace_string_in_file` портит файлы** — для больших правок использовать heredoc (`cat > file`). + +--- + +## Шаг 6: Таймаут при загрузке (v1.6, 64b2295) + +**Проблема:** Все файлы отправлялись одним POST-запросом → >30с → Ingress убивал соединение → «NetworkError when attempting to fetch resource». Никакого прогресса загрузки не было видно. + +**Решение:** +- `_upload_files` поддерживает `?cid=X` — первый файл создаёт договор, остальные добавляются +- Клиент: загрузка по одному файлу через XHR с `upload.onprogress` +- Прогресс: ↑ 0% → ↑ 45% → ↑ 100% → ✓ загружен +- XHR таймаут: 60 секунд на файл +- Размеры файлов из ZIP — через `zipEntry._data.uncompressedSize` +- Размеры выровнены вправо (`.num-cell`) + +--- + +## Шаг 7: Прогресс для файлов из ZIP не показывался (v1.7, c710a2d) + +**Проблема:** `findRowByName` имел условие `&& !fileQueue[i].isZipChild`, поэтому +SSE-события для файлов из ZIP не находили строку в таблице — статус оставался пустым. + +**Причина:** в v1.6 `findRowByName` использовалась и для upload (realFiles) +и для parse (все файлы). Фильтр защищал от нахождения zip-child при upload, +но ломал parse. + +**Решение:** убрать `!fileQueue[i].isZipChild`. Для upload это безопасно — +`realFiles` и так фильтрует `!isZipChild` перед вызовом. + +**БД:** проверена — все 5 файлов из ZIP созданы, 4 распарсены, 1 .doc с пустым parsed_text (нет LibreOffice). + +--- + +## Шаг 8: Баги после полной проверки (v1.8, e0c58fc) + +**Баг 1 — `zip_expanded` счётчик:** `zip_names.append(zname)` стоял ДО фильтра PDF/Word, +поэтому «↗ N файлов» включал .txt, .xlsx и т.д. **Исправлено:** перенос после фильтра. + +**Баг 2 — повторный `_parse` пересоздаст ZIP-файлы:** проверка `status='parsed'` пропускала +только распарсенные, но ZIP имеют статус `expanded`. При повторном вызове `_parse` +ZIP обрабатывался заново, создавая дубликаты. **Исправлено:** `status IN ('parsed','expanded')`. + +**Другие проверки (без ошибок):** +- `resetBtn()` — function declaration, hoisting работает, вызов до определения корректен +- `removeFile` — удаление детей перед родителем, индексы не смещаются (дети всегда после родителя) +- `fileTable.appendChild(summaryRow)` — повторные запуски создадут несколько строк-итогов (допустимо)