ваше сообщение коммита
This commit is contained in:
11
backend/db/migrations/032_create_is_rag_source_table.sql
Normal file
11
backend/db/migrations/032_create_is_rag_source_table.sql
Normal file
@@ -0,0 +1,11 @@
|
||||
-- Создание справочной таблицы is_rag_source
|
||||
CREATE TABLE IF NOT EXISTS is_rag_source (
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR(64) NOT NULL UNIQUE
|
||||
);
|
||||
|
||||
-- Заполнение начальными значениями
|
||||
INSERT INTO is_rag_source (name) VALUES
|
||||
('Да'),
|
||||
('Нет')
|
||||
ON CONFLICT (name) DO NOTHING;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE user_tables
|
||||
ADD COLUMN is_rag_source_id INTEGER REFERENCES is_rag_source(id) DEFAULT 2; -- 2 = 'Нет'
|
||||
@@ -73,16 +73,16 @@ async function processGuestMessages(userId, guestId) {
|
||||
conversation = lastConvResult.rows[0];
|
||||
} else {
|
||||
// Если нет ни одного диалога, создаём новый
|
||||
const firstMessage = guestMessages[0];
|
||||
const title = firstMessage.content
|
||||
? (firstMessage.content.length > 30 ? `${firstMessage.content.substring(0, 30)}...` : firstMessage.content)
|
||||
: (firstMessage.attachment_filename ? `Файл: ${firstMessage.attachment_filename}` : 'Новый диалог');
|
||||
const newConversationResult = await db.getQuery()(
|
||||
'INSERT INTO conversations (user_id, title) VALUES ($1, $2) RETURNING *',
|
||||
[userId, title]
|
||||
);
|
||||
const firstMessage = guestMessages[0];
|
||||
const title = firstMessage.content
|
||||
? (firstMessage.content.length > 30 ? `${firstMessage.content.substring(0, 30)}...` : firstMessage.content)
|
||||
: (firstMessage.attachment_filename ? `Файл: ${firstMessage.attachment_filename}` : 'Новый диалог');
|
||||
const newConversationResult = await db.getQuery()(
|
||||
'INSERT INTO conversations (user_id, title) VALUES ($1, $2) RETURNING *',
|
||||
[userId, title]
|
||||
);
|
||||
conversation = newConversationResult.rows[0];
|
||||
logger.info(`Created new conversation ${conversation.id} for guest messages`);
|
||||
logger.info(`Created new conversation ${conversation.id} for guest messages`);
|
||||
}
|
||||
// --- КОНЕЦ блока поиска/создания диалога ---
|
||||
|
||||
@@ -151,18 +151,18 @@ async function processGuestMessages(userId, guestId) {
|
||||
rules ? rules.rules : null
|
||||
);
|
||||
logger.info('AI response for guest message received' + (aiResponseContent ? '' : ' (empty)'), { conversationId: conversation.id });
|
||||
if (aiResponseContent) {
|
||||
if (aiResponseContent) {
|
||||
await db.getQuery()(
|
||||
`INSERT INTO messages
|
||||
`INSERT INTO messages
|
||||
(conversation_id, user_id, content, sender_type, role, channel)
|
||||
VALUES ($1, $2, $3, 'assistant', 'assistant', 'web')`,
|
||||
[conversation.id, userId, aiResponseContent]
|
||||
);
|
||||
);
|
||||
logger.info('AI response for guest message saved', { conversationId: conversation.id });
|
||||
}
|
||||
}
|
||||
} catch (aiError) {
|
||||
logger.error('Error getting or saving AI response for guest message:', aiError);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// --- конец блока генерации ответа ИИ ---
|
||||
@@ -361,16 +361,16 @@ router.post('/message', requireAuth, upload.array('attachments'), async (req, re
|
||||
conversationId = conversation.id;
|
||||
} else {
|
||||
// Создаем новый диалог, если нет ни одного
|
||||
const title = message
|
||||
? (message.length > 50 ? `${message.substring(0, 50)}...` : message)
|
||||
: (file ? `Файл: ${file.originalname}` : 'Новый диалог');
|
||||
const newConvResult = await db.getQuery()(
|
||||
'INSERT INTO conversations (user_id, title) VALUES ($1, $2) RETURNING *',
|
||||
[userId, title]
|
||||
);
|
||||
conversation = newConvResult.rows[0];
|
||||
conversationId = conversation.id;
|
||||
logger.info('Created new conversation', { conversationId, userId });
|
||||
const title = message
|
||||
? (message.length > 50 ? `${message.substring(0, 50)}...` : message)
|
||||
: (file ? `Файл: ${file.originalname}` : 'Новый диалог');
|
||||
const newConvResult = await db.getQuery()(
|
||||
'INSERT INTO conversations (user_id, title) VALUES ($1, $2) RETURNING *',
|
||||
[userId, title]
|
||||
);
|
||||
conversation = newConvResult.rows[0];
|
||||
conversationId = conversation.id;
|
||||
logger.info('Created new conversation', { conversationId, userId });
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,10 @@ router.get('/', async (req, res, next) => {
|
||||
// Создать новую таблицу (доступно всем)
|
||||
router.post('/', async (req, res, next) => {
|
||||
try {
|
||||
const { name, description } = req.body;
|
||||
const { name, description, isRagSourceId } = req.body;
|
||||
const result = await db.getQuery()(
|
||||
'INSERT INTO user_tables (name, description) VALUES ($1, $2) RETURNING *',
|
||||
[name, description || null]
|
||||
'INSERT INTO user_tables (name, description, is_rag_source_id) VALUES ($1, $2, $3) RETURNING *',
|
||||
[name, description || null, isRagSourceId || 2]
|
||||
);
|
||||
res.json(result.rows[0]);
|
||||
} catch (err) {
|
||||
@@ -38,10 +38,12 @@ router.post('/', async (req, res, next) => {
|
||||
router.get('/:id', async (req, res, next) => {
|
||||
try {
|
||||
const tableId = req.params.id;
|
||||
const tableMetaResult = await db.getQuery()('SELECT name, description FROM user_tables WHERE id = $1', [tableId]);
|
||||
const tableMeta = tableMetaResult.rows[0] || { name: '', description: '' };
|
||||
const columns = (await db.getQuery()('SELECT * FROM user_columns WHERE table_id = $1 ORDER BY "order" ASC, id ASC', [tableId])).rows;
|
||||
const rows = (await db.getQuery()('SELECT * FROM user_rows WHERE table_id = $1 ORDER BY id', [tableId])).rows;
|
||||
const cellValues = (await db.getQuery()('SELECT * FROM user_cell_values WHERE row_id IN (SELECT id FROM user_rows WHERE table_id = $1)', [tableId])).rows;
|
||||
res.json({ columns, rows, cellValues });
|
||||
res.json({ name: tableMeta.name, description: tableMeta.description, columns, rows, cellValues });
|
||||
} catch (err) {
|
||||
next(err);
|
||||
}
|
||||
@@ -181,14 +183,15 @@ router.patch('/column/:columnId', async (req, res, next) => {
|
||||
router.patch('/:id', async (req, res, next) => {
|
||||
try {
|
||||
const tableId = req.params.id;
|
||||
const { name, description } = req.body;
|
||||
const { name, description, isRagSourceId } = req.body;
|
||||
const result = await db.getQuery()(
|
||||
`UPDATE user_tables SET
|
||||
name = COALESCE($1, name),
|
||||
description = COALESCE($2, description),
|
||||
is_rag_source_id = COALESCE($3, is_rag_source_id),
|
||||
updated_at = NOW()
|
||||
WHERE id = $3 RETURNING *`,
|
||||
[name, description, tableId]
|
||||
WHERE id = $4 RETURNING *`,
|
||||
[name, description, isRagSourceId, tableId]
|
||||
);
|
||||
res.json(result.rows[0]);
|
||||
} catch (err) {
|
||||
|
||||
Reference in New Issue
Block a user