import db from "../../db"; import { chatMessages, type NewChatMessage, } from "../../db/schema/chatMessages"; import { eq, desc, sql } from "drizzle-orm"; /** * Сохранить новое сообщение в чате */ export async function saveChatMessage(message: NewChatMessage) { try { console.log("[saveChatMessage] Attempting to insert message:", message); const [newMessage] = await db .insert(chatMessages) .values(message) .returning(); console.log("[saveChatMessage] Message inserted successfully:", newMessage); return newMessage; } catch (error) { console.error("[saveChatMessage] Database error:", error); throw error; } } /** * Получить историю сообщений для сессии * @param sessionId ID сессии * @param limit Максимальное количество сообщений (по умолчанию 100) */ export async function getChatHistory(sessionId: string, limit = 100) { const messages = await db .select({ id: chatMessages.id, // senderId - это либо userId (для авторизованных), либо guestId (для гостей) senderId: sql`COALESCE(${chatMessages.userId}, ${chatMessages.guestId})`.as('senderId'), senderName: chatMessages.senderName, content: chatMessages.content, timestamp: chatMessages.createdAt, type: chatMessages.type, }) .from(chatMessages) .where(eq(chatMessages.sessionId, sessionId)) .orderBy(desc(chatMessages.createdAt)) .limit(limit); // Возвращаем в правильном порядке (старые сначала) return messages.reverse(); } /** * Удалить все сообщения для сессии * @param sessionId ID сессии */ export async function deleteChatHistory(sessionId: string) { await db.delete(chatMessages).where(eq(chatMessages.sessionId, sessionId)); }