Files
aiform_dev/docs/CODE1_FIX.md
AI Assistant 4c8fda5f55 Добавлено логирование для отладки черновиков
- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API
- Добавлены логи в backend (claims.py) для отладки SQL запросов
- Создан лог сессии с описанием проблемы и текущего состояния
- Проблема: API возвращает 0 черновиков, хотя в БД есть данные
2025-11-19 18:46:48 +03:00

104 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Исправление ошибки в Code1: mapDialogHistory
## Проблема
**Ошибка:**
```
Cannot read properties of null (reading 'map') [line 69]
```
**Причина:**
Функция `mapDialogHistory` получает `null` вместо массива, когда `src.dialog_history` равен `null`.
## Исправление
### Текущий код (строка 69):
```javascript
function mapDialogHistory(h = []) {
return h.map(m => ({
id: toNullish(m.id),
role: toNullish(m.role),
message: toNullish(m.message),
message_type: toNullish(m.message_type),
tg_message_id: toNullish(m.tg_message_id),
created_at: toNullish(m.created_at),
}));
}
```
### Исправленный код:
```javascript
function mapDialogHistory(h = []) {
// Проверяем, что h не null и является массивом
if (!h || !Array.isArray(h)) return [];
return h.map(m => ({
id: toNullish(m.id),
role: toNullish(m.role),
message: toNullish(m.message),
message_type: toNullish(m.message_type),
tg_message_id: toNullish(m.tg_message_id),
created_at: toNullish(m.created_at),
}));
}
```
## Альтернативное решение
Можно также исправить в месте вызова:
```javascript
// В функции normalizeOne, строка ~172
dialog_history: mapDialogHistory(src.dialog_history || []),
```
Но лучше исправить саму функцию, чтобы она была более устойчивой.
## Полный исправленный код функции mapDialogHistory
```javascript
function mapDialogHistory(h = []) {
// Проверяем, что h не null и является массивом
if (!h || !Array.isArray(h)) return [];
return h.map(m => ({
id: toNullish(m.id),
role: toNullish(m.role),
message: toNullish(m.message),
message_type: toNullish(m.message_type),
tg_message_id: toNullish(m.tg_message_id),
created_at: toNullish(m.created_at),
}));
}
```
## Почему это происходит
Когда SQL запрос в ноде `give_data1` возвращает `null` для `dialog_history` (если нет записей в `clpr_dialog_history_tg`), функция `mapDialogHistory` получает `null` вместо массива.
PostgreSQL `jsonb_agg` возвращает `null`, если нет строк для агрегации, а не пустой массив `[]`.
## Дополнительные проверки
Можно также добавить проверки для других функций, которые работают с массивами:
```javascript
function mapDocuments(docs = []) {
if (!docs || !Array.isArray(docs)) return [];
return docs.map(d => ({...}));
}
function mapVisionDocs(vds = []) {
if (!vds || !Array.isArray(vds)) return [];
return vds.map(v => ({...}));
}
function mapCombinedDocs(cds = []) {
if (!cds || !Array.isArray(cds)) return [];
return cds.map(c => ({...}));
}
```
Но для `mapDialogHistory` это критично, т.к. она вызывается первой и падает.