- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API - Добавлены логи в backend (claims.py) для отладки SQL запросов - Создан лог сессии с описанием проблемы и текущего состояния - Проблема: API возвращает 0 черновиков, хотя в БД есть данные
104 lines
3.1 KiB
Markdown
104 lines
3.1 KiB
Markdown
# Исправление ошибки в 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` это критично, т.к. она вызывается первой и падает.
|
||
|