import type { BUN_SQLITE_COBBLE_BOT_SESSIONS } from "@/db/types/db"; import BunSQLite from "@moduletrace/bun-sqlite"; import createBotSession from "./create-bot-session"; import grabActiveBotSession from "./grab-active-bot-session"; type Params = { /** * The user the conversation is with. */ user_id: number | string; bot_id: number | string; workspace_id?: number | string | null; }; /** * New session: closes the conversation's active session and starts a * fresh one, linked to nothing and carrying nothing over. Carrying a * conversation on is `carryOverBotSession` (the bot, Continue in new * session, the rollover). An active session with no messages yet is kept * as it is. */ export default async function startBotSession({ user_id, bot_id, workspace_id, }: Params): Promise { const active = await grabActiveBotSession({ user_id, bot_id, workspace_id }); if (active?.id) { const has_messages = ( await BunSQLite.sql({ sql: `SELECT id FROM bot_messages WHERE session_id = ? LIMIT 1`, values: [active.id], }) ).payload?.[0]; if (!has_messages) return active; await BunSQLite.sql({ sql: `UPDATE bot_sessions SET status = 'closed', unread = 0, updated_at = ? WHERE id = ?`, values: [Date.now(), active.id], }); } return await createBotSession({ user_id, bot_id, workspace_id }); }