refactor: v2 重构 — 模块化拆分 + AI Prompt模板化 + 前端状态管理

P0 - AI交互层:
- ai/prompt.js: 模块化 Prompt 模板
- ai/validator.js: JSON Schema 校验 + normalize
- ai/client.js: DeepSeek API 封装
- 金额计算唯一化,时间格式归一化

P1 - 后端架构:
- routes/: auth/rooms/messages/purchases 独立路由
- middleware/auth.js: 认证授权中间件
- ws/index.js: WebSocket 连接管理
- db.js: 启用 foreign_keys
- server.js: 从588行精简到40行入口

P2 - 前端架构:
- public/css/style.css: CSS 独立
- public/js/store.js: 全局状态 Store
- public/js/{chat,ws,purchases,auth}.js: 功能模块拆分
- index.html: 纯 HTML 结构, v2.6
This commit is contained in:
2026-07-22 16:59:56 +08:00
parent e9adbc90cf
commit 49ae9ef251
21 changed files with 1564 additions and 1298 deletions

View File

@@ -9,9 +9,12 @@ if (!fs.existsSync(dataDir)) {
const dbPath = path.join(dataDir, 'xiaocai.db');
const db = new Database(dbPath);
db.pragma('journal_mode = WAL');
// 创建基础表(如果不存在)
// 关键 pragma
db.pragma('journal_mode = WAL');
db.pragma('foreign_keys = ON');
// 创建基础表
db.exec(`
CREATE TABLE IF NOT EXISTS users (
username TEXT PRIMARY KEY,
@@ -75,7 +78,7 @@ db.exec(`
);
`);
// 为已有数据库添加可能缺失的列(安全迁移忽略错误
// 安全迁移忽略已存在的列
const migrations = [
`ALTER TABLE purchases ADD COLUMN quantity INTEGER DEFAULT 1`,
`ALTER TABLE purchases ADD COLUMN unit_price REAL DEFAULT 0`,
@@ -85,13 +88,8 @@ const migrations = [
`ALTER TABLE purchases ADD COLUMN remarks TEXT DEFAULT ''`,
`ALTER TABLE rooms ADD COLUMN white_list TEXT DEFAULT ''`,
];
for (const sql of migrations) {
try {
db.exec(sql);
} catch (e) {
// 列已存在或其他错误,忽略
}
try { db.exec(sql); } catch (e) { /* 列已存在 */ }
}
module.exports = db;