第一次运行实验时自动建好预置的数据库

- 运行时带上当前实验;实验有 database.sql 而学生还没有其中的库时,先建好这些库
  (已有的库不动,保留学生的数据);建库失败不影响运行
- 教材项目 8 要"附加"现成的 WisdomCampus 库,学生不用先去数据库页面恢复

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-23 15:14:49 +08:00
1 parent 5ae07b851d
commit 10c50265b2
5 files changed
+27 -8

No files matched your search

+7 -1
View File
@@ -7,7 +7,8 @@ import { languageService } from './language-service'
import { config } from './config'
import { openDatabase } from './db'
import { createGradingQueue } from './grading/queue'
import { userDatabaseDir } from './databases'
import { restoreExperimentDatabases, userDatabaseDir } from './databases'
import { listSamples } from './samples'
import { cleanupStaleRuns, RunSession } from './run-session'
import { sqlService } from './sql-service'
import { checkSandbox, sandboxError } from './sandbox'
@@ -56,6 +57,11 @@ const server = Bun.serve({
if (!session) return
if (message.type === 'run') {
try {
const { sampleId } = message
if (typeof sampleId === 'string' && (await listSamples()).some((s) => s.id === sampleId)) {
// 建库失败不影响运行(程序连不上库时会报出来)
await restoreExperimentDatabases(ws.data.userId!, sampleId, true).catch((error) => console.error('自动建实验数据库失败', error))
}
await session.start(message.files)
} catch (error) {
ws.send(JSON.stringify({ type: 'serverError', message: String(error) } satisfies ServerMessage))