Добавлено логирование для отладки черновиков
- Добавлены логи в frontend (ClaimForm.tsx) для отслеживания unified_id и запросов к API - Добавлены логи в backend (claims.py) для отладки SQL запросов - Создан лог сессии с описанием проблемы и текущего состояния - Проблема: API возвращает 0 черновиков, хотя в БД есть данные
This commit is contained in:
103
docs/CODE1_FIX.md
Normal file
103
docs/CODE1_FIX.md
Normal file
@@ -0,0 +1,103 @@
|
||||
# Исправление ошибки в 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` это критично, т.к. она вызывается первой и падает.
|
||||
|
||||
Reference in New Issue
Block a user