From c0e1647ab65323dfb848536f636c36748d721033 Mon Sep 17 00:00:00 2001 From: digua Date: Mon, 18 May 2026 18:47:35 +0800 Subject: [PATCH] feat(core): extract updateSessionOwnerId and renameSession to @openchatlab/core Move pure SQL session CRUD operations (owner_id update, rename) to the shared core package as DatabaseAdapter functions. Electron wrappers now delegate to core, keeping only connection management and error handling. --- electron/main/database/core.ts | 31 ++++++++++------------ packages/core/src/index.ts | 2 ++ packages/core/src/query/index.ts | 2 ++ packages/core/src/query/session-queries.ts | 14 ++++++++++ 4 files changed, 32 insertions(+), 17 deletions(-) diff --git a/electron/main/database/core.ts b/electron/main/database/core.ts index 3c51e41d..29efa457 100644 --- a/electron/main/database/core.ts +++ b/electron/main/database/core.ts @@ -6,7 +6,12 @@ import Database from 'better-sqlite3' import * as fs from 'fs' import * as path from 'path' -import { CHAT_DB_SCHEMA, FTS_TABLE_SCHEMA } from '@openchatlab/core' +import { + CHAT_DB_SCHEMA, + FTS_TABLE_SCHEMA, + updateSessionOwnerId as coreUpdateOwnerId, + renameSession as coreRenameSession, +} from '@openchatlab/core' import { BetterSqliteAdapter, writeParseResultToDb } from '@openchatlab/node-runtime' import type { ParseResult } from '../../../src/types/base' import { migrateDatabase, needsMigration, CURRENT_SCHEMA_VERSION } from './migrations' @@ -118,15 +123,11 @@ export function importData(parseResult: ParseResult): string { * 更新会话的 ownerId */ export function updateSessionOwnerId(sessionId: string, ownerId: string | null): boolean { - // 使用带迁移的打开方式,确保 owner_id 列存在 const db = openDatabaseWithMigration(sessionId) - if (!db) { - return false - } + if (!db) return false try { - const stmt = db.prepare('UPDATE meta SET owner_id = ?') - stmt.run(ownerId) + coreUpdateOwnerId(new BetterSqliteAdapter(db), ownerId) return true } catch (error) { console.error('[Database] Failed to update session ownerId:', error) @@ -169,22 +170,18 @@ export function deleteSession(sessionId: string): boolean { */ export function renameSession(sessionId: string, newName: string): boolean { const dbPath = getDbPath(sessionId) - if (!fs.existsSync(dbPath)) { - return false - } + if (!fs.existsSync(dbPath)) return false + const db = new Database(dbPath) + db.pragma('journal_mode = WAL') try { - const db = new Database(dbPath) - db.pragma('journal_mode = WAL') - - const stmt = db.prepare('UPDATE meta SET name = ?') - stmt.run(newName) - - db.close() + coreRenameSession(new BetterSqliteAdapter(db), newName) return true } catch (error) { console.error('[Database] Failed to rename session:', error) return false + } finally { + db.close() } } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 70f69864..6a0840bd 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -96,6 +96,8 @@ export { deleteMember, ensureAliasesColumn, ensureAvatarColumn, + updateSessionOwnerId, + renameSession, } from './query' // 查询类型 diff --git a/packages/core/src/query/index.ts b/packages/core/src/query/index.ts index 2f30fe95..9d521de0 100644 --- a/packages/core/src/query/index.ts +++ b/packages/core/src/query/index.ts @@ -21,6 +21,8 @@ export { getChatSessionSummary, saveChatSessionSummary, updateSessionGapThreshold, + updateSessionOwnerId, + renameSession, clearSessionIndex, generateSessionIndex, generateIncrementalSessionIndex, diff --git a/packages/core/src/query/session-queries.ts b/packages/core/src/query/session-queries.ts index 8d6004c8..bfa6a256 100644 --- a/packages/core/src/query/session-queries.ts +++ b/packages/core/src/query/session-queries.ts @@ -584,6 +584,20 @@ export function updateSessionGapThreshold(db: DatabaseAdapter, gapThreshold: num db.prepare('UPDATE meta SET session_gap_threshold = ?').run(gapThreshold) } +/** + * Update session owner_id in meta table. + */ +export function updateSessionOwnerId(db: DatabaseAdapter, ownerId: string | null): void { + db.prepare('UPDATE meta SET owner_id = ?').run(ownerId) +} + +/** + * Rename a session (update name in meta table). + */ +export function renameSession(db: DatabaseAdapter, newName: string): void { + db.prepare('UPDATE meta SET name = ?').run(newName) +} + /** * Delete all session index data (chat_session + message_context). */