@qq33357486/oh-my-task 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +315 -0
- package/dist/api/middleware/auth.d.ts +26 -0
- package/dist/api/middleware/auth.d.ts.map +1 -0
- package/dist/api/middleware/auth.js +90 -0
- package/dist/api/middleware/auth.js.map +1 -0
- package/dist/api/middleware/captcha.d.ts +6 -0
- package/dist/api/middleware/captcha.d.ts.map +1 -0
- package/dist/api/middleware/captcha.js +47 -0
- package/dist/api/middleware/captcha.js.map +1 -0
- package/dist/api/middleware/ownerCheck.d.ts +22 -0
- package/dist/api/middleware/ownerCheck.d.ts.map +1 -0
- package/dist/api/middleware/ownerCheck.js +138 -0
- package/dist/api/middleware/ownerCheck.js.map +1 -0
- package/dist/api/routes/auth.d.ts +8 -0
- package/dist/api/routes/auth.d.ts.map +1 -0
- package/dist/api/routes/auth.js +136 -0
- package/dist/api/routes/auth.js.map +1 -0
- package/dist/api/routes/config.d.ts +3 -0
- package/dist/api/routes/config.d.ts.map +1 -0
- package/dist/api/routes/config.js +26 -0
- package/dist/api/routes/config.js.map +1 -0
- package/dist/api/routes/projects.d.ts +3 -0
- package/dist/api/routes/projects.d.ts.map +1 -0
- package/dist/api/routes/projects.js +54 -0
- package/dist/api/routes/projects.js.map +1 -0
- package/dist/api/routes/schedule.d.ts +3 -0
- package/dist/api/routes/schedule.d.ts.map +1 -0
- package/dist/api/routes/schedule.js +92 -0
- package/dist/api/routes/schedule.js.map +1 -0
- package/dist/api/routes/sops.d.ts +3 -0
- package/dist/api/routes/sops.d.ts.map +1 -0
- package/dist/api/routes/sops.js +155 -0
- package/dist/api/routes/sops.js.map +1 -0
- package/dist/api/routes/tasks.d.ts +3 -0
- package/dist/api/routes/tasks.d.ts.map +1 -0
- package/dist/api/routes/tasks.js +218 -0
- package/dist/api/routes/tasks.js.map +1 -0
- package/dist/api/routes/tokens.d.ts +3 -0
- package/dist/api/routes/tokens.d.ts.map +1 -0
- package/dist/api/routes/tokens.js +77 -0
- package/dist/api/routes/tokens.js.map +1 -0
- package/dist/api/routes/users.d.ts +3 -0
- package/dist/api/routes/users.d.ts.map +1 -0
- package/dist/api/routes/users.js +94 -0
- package/dist/api/routes/users.js.map +1 -0
- package/dist/api/routes/versions.d.ts +3 -0
- package/dist/api/routes/versions.d.ts.map +1 -0
- package/dist/api/routes/versions.js +156 -0
- package/dist/api/routes/versions.js.map +1 -0
- package/dist/api/server.d.ts +4 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +70 -0
- package/dist/api/server.js.map +1 -0
- package/dist/db/connection.d.ts +15 -0
- package/dist/db/connection.d.ts.map +1 -0
- package/dist/db/connection.js +158 -0
- package/dist/db/connection.js.map +1 -0
- package/dist/db/init.d.ts +2 -0
- package/dist/db/init.d.ts.map +1 -0
- package/dist/db/init.js +5 -0
- package/dist/db/init.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +146 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/activate-task.d.ts +10 -0
- package/dist/mcp/tools/activate-task.d.ts.map +1 -0
- package/dist/mcp/tools/activate-task.js +52 -0
- package/dist/mcp/tools/activate-task.js.map +1 -0
- package/dist/mcp/tools/add-task-note.d.ts +10 -0
- package/dist/mcp/tools/add-task-note.d.ts.map +1 -0
- package/dist/mcp/tools/add-task-note.js +46 -0
- package/dist/mcp/tools/add-task-note.js.map +1 -0
- package/dist/mcp/tools/approve-task.d.ts +10 -0
- package/dist/mcp/tools/approve-task.d.ts.map +1 -0
- package/dist/mcp/tools/approve-task.js +59 -0
- package/dist/mcp/tools/approve-task.js.map +1 -0
- package/dist/mcp/tools/archive-version.d.ts +10 -0
- package/dist/mcp/tools/archive-version.d.ts.map +1 -0
- package/dist/mcp/tools/archive-version.js +57 -0
- package/dist/mcp/tools/archive-version.js.map +1 -0
- package/dist/mcp/tools/assign-task.d.ts +10 -0
- package/dist/mcp/tools/assign-task.d.ts.map +1 -0
- package/dist/mcp/tools/assign-task.js +53 -0
- package/dist/mcp/tools/assign-task.js.map +1 -0
- package/dist/mcp/tools/complete-task.d.ts +10 -0
- package/dist/mcp/tools/complete-task.d.ts.map +1 -0
- package/dist/mcp/tools/complete-task.js +46 -0
- package/dist/mcp/tools/complete-task.js.map +1 -0
- package/dist/mcp/tools/create-sop.d.ts +10 -0
- package/dist/mcp/tools/create-sop.d.ts.map +1 -0
- package/dist/mcp/tools/create-sop.js +90 -0
- package/dist/mcp/tools/create-sop.js.map +1 -0
- package/dist/mcp/tools/create-task.d.ts +10 -0
- package/dist/mcp/tools/create-task.d.ts.map +1 -0
- package/dist/mcp/tools/create-task.js +138 -0
- package/dist/mcp/tools/create-task.js.map +1 -0
- package/dist/mcp/tools/create-version.d.ts +10 -0
- package/dist/mcp/tools/create-version.d.ts.map +1 -0
- package/dist/mcp/tools/create-version.js +86 -0
- package/dist/mcp/tools/create-version.js.map +1 -0
- package/dist/mcp/tools/delete-task.d.ts +10 -0
- package/dist/mcp/tools/delete-task.d.ts.map +1 -0
- package/dist/mcp/tools/delete-task.js +34 -0
- package/dist/mcp/tools/delete-task.js.map +1 -0
- package/dist/mcp/tools/get-my-tasks.d.ts +10 -0
- package/dist/mcp/tools/get-my-tasks.d.ts.map +1 -0
- package/dist/mcp/tools/get-my-tasks.js +88 -0
- package/dist/mcp/tools/get-my-tasks.js.map +1 -0
- package/dist/mcp/tools/get-next-task.d.ts +10 -0
- package/dist/mcp/tools/get-next-task.d.ts.map +1 -0
- package/dist/mcp/tools/get-next-task.js +84 -0
- package/dist/mcp/tools/get-next-task.js.map +1 -0
- package/dist/mcp/tools/get-sop.d.ts +10 -0
- package/dist/mcp/tools/get-sop.d.ts.map +1 -0
- package/dist/mcp/tools/get-sop.js +67 -0
- package/dist/mcp/tools/get-sop.js.map +1 -0
- package/dist/mcp/tools/get-task-context.d.ts +10 -0
- package/dist/mcp/tools/get-task-context.d.ts.map +1 -0
- package/dist/mcp/tools/get-task-context.js +114 -0
- package/dist/mcp/tools/get-task-context.js.map +1 -0
- package/dist/mcp/tools/get-task.d.ts +10 -0
- package/dist/mcp/tools/get-task.d.ts.map +1 -0
- package/dist/mcp/tools/get-task.js +61 -0
- package/dist/mcp/tools/get-task.js.map +1 -0
- package/dist/mcp/tools/helpers.d.ts +10 -0
- package/dist/mcp/tools/helpers.d.ts.map +1 -0
- package/dist/mcp/tools/helpers.js +17 -0
- package/dist/mcp/tools/helpers.js.map +1 -0
- package/dist/mcp/tools/init-project.d.ts +12 -0
- package/dist/mcp/tools/init-project.d.ts.map +1 -0
- package/dist/mcp/tools/init-project.js +162 -0
- package/dist/mcp/tools/init-project.js.map +1 -0
- package/dist/mcp/tools/list-sops.d.ts +10 -0
- package/dist/mcp/tools/list-sops.d.ts.map +1 -0
- package/dist/mcp/tools/list-sops.js +57 -0
- package/dist/mcp/tools/list-sops.js.map +1 -0
- package/dist/mcp/tools/list-tasks.d.ts +10 -0
- package/dist/mcp/tools/list-tasks.d.ts.map +1 -0
- package/dist/mcp/tools/list-tasks.js +96 -0
- package/dist/mcp/tools/list-tasks.js.map +1 -0
- package/dist/mcp/tools/list-versions.d.ts +10 -0
- package/dist/mcp/tools/list-versions.d.ts.map +1 -0
- package/dist/mcp/tools/list-versions.js +76 -0
- package/dist/mcp/tools/list-versions.js.map +1 -0
- package/dist/mcp/tools/reject-task.d.ts +10 -0
- package/dist/mcp/tools/reject-task.d.ts.map +1 -0
- package/dist/mcp/tools/reject-task.js +63 -0
- package/dist/mcp/tools/reject-task.js.map +1 -0
- package/dist/mcp/tools/reschedule.d.ts +17 -0
- package/dist/mcp/tools/reschedule.d.ts.map +1 -0
- package/dist/mcp/tools/reschedule.js +107 -0
- package/dist/mcp/tools/reschedule.js.map +1 -0
- package/dist/mcp/tools/start-task.d.ts +10 -0
- package/dist/mcp/tools/start-task.d.ts.map +1 -0
- package/dist/mcp/tools/start-task.js +42 -0
- package/dist/mcp/tools/start-task.js.map +1 -0
- package/dist/mcp/tools/submit-for-review.d.ts +10 -0
- package/dist/mcp/tools/submit-for-review.d.ts.map +1 -0
- package/dist/mcp/tools/submit-for-review.js +64 -0
- package/dist/mcp/tools/submit-for-review.js.map +1 -0
- package/dist/mcp/tools/update-sop.d.ts +10 -0
- package/dist/mcp/tools/update-sop.d.ts.map +1 -0
- package/dist/mcp/tools/update-sop.js +113 -0
- package/dist/mcp/tools/update-sop.js.map +1 -0
- package/dist/mcp/tools/update-task-doc.d.ts +10 -0
- package/dist/mcp/tools/update-task-doc.d.ts.map +1 -0
- package/dist/mcp/tools/update-task-doc.js +70 -0
- package/dist/mcp/tools/update-task-doc.js.map +1 -0
- package/dist/mcp/tools/update-task.d.ts +10 -0
- package/dist/mcp/tools/update-task.d.ts.map +1 -0
- package/dist/mcp/tools/update-task.js +106 -0
- package/dist/mcp/tools/update-task.js.map +1 -0
- package/dist/mcp/tools/utils/config.d.ts +35 -0
- package/dist/mcp/tools/utils/config.d.ts.map +1 -0
- package/dist/mcp/tools/utils/config.js +81 -0
- package/dist/mcp/tools/utils/config.js.map +1 -0
- package/dist/services/config.service.d.ts +6 -0
- package/dist/services/config.service.d.ts.map +1 -0
- package/dist/services/config.service.js +48 -0
- package/dist/services/config.service.js.map +1 -0
- package/dist/services/project.service.d.ts +29 -0
- package/dist/services/project.service.d.ts.map +1 -0
- package/dist/services/project.service.js +111 -0
- package/dist/services/project.service.js.map +1 -0
- package/dist/services/schedule.service.d.ts +104 -0
- package/dist/services/schedule.service.d.ts.map +1 -0
- package/dist/services/schedule.service.js +362 -0
- package/dist/services/schedule.service.js.map +1 -0
- package/dist/services/session.service.d.ts +5 -0
- package/dist/services/session.service.d.ts.map +1 -0
- package/dist/services/session.service.js +30 -0
- package/dist/services/session.service.js.map +1 -0
- package/dist/services/sop.service.d.ts +53 -0
- package/dist/services/sop.service.d.ts.map +1 -0
- package/dist/services/sop.service.js +275 -0
- package/dist/services/sop.service.js.map +1 -0
- package/dist/services/task.service.d.ts +62 -0
- package/dist/services/task.service.d.ts.map +1 -0
- package/dist/services/task.service.js +546 -0
- package/dist/services/task.service.js.map +1 -0
- package/dist/services/token.service.d.ts +37 -0
- package/dist/services/token.service.d.ts.map +1 -0
- package/dist/services/token.service.js +99 -0
- package/dist/services/token.service.js.map +1 -0
- package/dist/services/user.service.d.ts +95 -0
- package/dist/services/user.service.d.ts.map +1 -0
- package/dist/services/user.service.js +275 -0
- package/dist/services/user.service.js.map +1 -0
- package/dist/services/version.service.d.ts +70 -0
- package/dist/services/version.service.d.ts.map +1 -0
- package/dist/services/version.service.js +225 -0
- package/dist/services/version.service.js.map +1 -0
- package/dist/types/index.d.ts +207 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/password.d.ts +16 -0
- package/dist/utils/password.d.ts.map +1 -0
- package/dist/utils/password.js +37 -0
- package/dist/utils/password.js.map +1 -0
- package/dist/utils/validation.d.ts +13 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +20 -0
- package/dist/utils/validation.js.map +1 -0
- package/package.json +65 -0
- package/src/db/schema.sql +162 -0
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
-- oh-my-task Database Schema
|
|
2
|
+
-- SQLite
|
|
3
|
+
|
|
4
|
+
-- 用户表
|
|
5
|
+
CREATE TABLE IF NOT EXISTS users (
|
|
6
|
+
id TEXT PRIMARY KEY,
|
|
7
|
+
name TEXT NOT NULL,
|
|
8
|
+
email TEXT UNIQUE, -- 登录邮箱
|
|
9
|
+
password_hash TEXT, -- 密码哈希(bcrypt)
|
|
10
|
+
api_key TEXT UNIQUE, -- API Key(可选,兼容旧配置)
|
|
11
|
+
role TEXT NOT NULL DEFAULT 'member' CHECK (role IN ('admin', 'member')),
|
|
12
|
+
is_first_login INTEGER NOT NULL DEFAULT 0 CHECK (is_first_login IN (0, 1)), -- 是否首次登录(需强制修改密码)
|
|
13
|
+
reset_token TEXT, -- 密码重置令牌
|
|
14
|
+
reset_token_expires DATETIME, -- 重置令牌过期时间
|
|
15
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
16
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
-- 用户 Token 表(用于 MCP 认证)
|
|
20
|
+
CREATE TABLE IF NOT EXISTS user_tokens (
|
|
21
|
+
id TEXT PRIMARY KEY,
|
|
22
|
+
user_id TEXT NOT NULL,
|
|
23
|
+
name TEXT NOT NULL, -- Token 名称,如 "VS Code", "Cursor"
|
|
24
|
+
token TEXT NOT NULL UNIQUE, -- Token 值(omt_ 前缀)
|
|
25
|
+
last_used_at DATETIME, -- 最后使用时间
|
|
26
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
27
|
+
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
-- 项目表
|
|
31
|
+
CREATE TABLE IF NOT EXISTS projects (
|
|
32
|
+
id TEXT PRIMARY KEY,
|
|
33
|
+
name TEXT NOT NULL,
|
|
34
|
+
description TEXT,
|
|
35
|
+
owner_id TEXT, -- 项目所有者
|
|
36
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
37
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
38
|
+
FOREIGN KEY (owner_id) REFERENCES users(id) ON DELETE SET NULL
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
-- 版本表
|
|
42
|
+
CREATE TABLE IF NOT EXISTS versions (
|
|
43
|
+
id TEXT PRIMARY KEY,
|
|
44
|
+
project_id TEXT NOT NULL,
|
|
45
|
+
name TEXT NOT NULL,
|
|
46
|
+
description TEXT,
|
|
47
|
+
start_date DATE,
|
|
48
|
+
due_date DATE,
|
|
49
|
+
locked_at DATETIME DEFAULT NULL,
|
|
50
|
+
archived_at DATETIME DEFAULT NULL, -- 归档时间
|
|
51
|
+
sort_order INTEGER DEFAULT 0,
|
|
52
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
53
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
54
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
-- SOP(技能/智能体)表
|
|
58
|
+
CREATE TABLE IF NOT EXISTS sops (
|
|
59
|
+
id TEXT PRIMARY KEY,
|
|
60
|
+
project_id TEXT NOT NULL,
|
|
61
|
+
name TEXT NOT NULL,
|
|
62
|
+
description TEXT,
|
|
63
|
+
rules TEXT DEFAULT '',
|
|
64
|
+
workflow TEXT DEFAULT '',
|
|
65
|
+
required TEXT DEFAULT '',
|
|
66
|
+
forbidden TEXT DEFAULT '',
|
|
67
|
+
experience TEXT DEFAULT '',
|
|
68
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
69
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
70
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
-- 任务表
|
|
74
|
+
CREATE TABLE IF NOT EXISTS tasks (
|
|
75
|
+
id TEXT PRIMARY KEY,
|
|
76
|
+
project_id TEXT NOT NULL,
|
|
77
|
+
version_id TEXT,
|
|
78
|
+
parent_id TEXT,
|
|
79
|
+
title TEXT NOT NULL,
|
|
80
|
+
description TEXT,
|
|
81
|
+
status TEXT NOT NULL DEFAULT 'planned' CHECK (status IN ('planned', 'in_progress', 'done')),
|
|
82
|
+
assignee_id TEXT,
|
|
83
|
+
estimated_days REAL DEFAULT 1,
|
|
84
|
+
start_date DATE,
|
|
85
|
+
due_date DATE,
|
|
86
|
+
actual_start DATETIME,
|
|
87
|
+
actual_end DATETIME,
|
|
88
|
+
sort_order INTEGER DEFAULT 0,
|
|
89
|
+
dependencies TEXT,
|
|
90
|
+
sop_id TEXT, -- 关联的 SOP
|
|
91
|
+
deleted_at DATETIME DEFAULT NULL, -- 软删除标记
|
|
92
|
+
-- 阶段性文档字段(Markdown 格式)
|
|
93
|
+
requirement_doc TEXT, -- 需求文档:这个任务要做什么
|
|
94
|
+
design_doc TEXT, -- 设计文档:怎么做,技术方案
|
|
95
|
+
current_status TEXT, -- 当前情况:做到哪了,遇到什么问题
|
|
96
|
+
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
97
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
98
|
+
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,
|
|
99
|
+
FOREIGN KEY (version_id) REFERENCES versions(id) ON DELETE SET NULL,
|
|
100
|
+
FOREIGN KEY (parent_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
|
101
|
+
FOREIGN KEY (assignee_id) REFERENCES users(id) ON DELETE SET NULL,
|
|
102
|
+
FOREIGN KEY (sop_id) REFERENCES sops(id) ON DELETE SET NULL
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
-- 任务历史表
|
|
106
|
+
CREATE TABLE IF NOT EXISTS task_history (
|
|
107
|
+
id TEXT PRIMARY KEY,
|
|
108
|
+
task_id TEXT NOT NULL,
|
|
109
|
+
action TEXT NOT NULL CHECK (action IN ('created', 'updated', 'status_changed', 'assigned', 'noted')),
|
|
110
|
+
field TEXT,
|
|
111
|
+
old_value TEXT,
|
|
112
|
+
new_value TEXT,
|
|
113
|
+
reason TEXT,
|
|
114
|
+
changed_by TEXT,
|
|
115
|
+
changed_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
116
|
+
FOREIGN KEY (task_id) REFERENCES tasks(id) ON DELETE CASCADE,
|
|
117
|
+
FOREIGN KEY (changed_by) REFERENCES users(id) ON DELETE SET NULL
|
|
118
|
+
);
|
|
119
|
+
|
|
120
|
+
-- 节假日表
|
|
121
|
+
CREATE TABLE IF NOT EXISTS holidays (
|
|
122
|
+
date DATE PRIMARY KEY,
|
|
123
|
+
year INTEGER NOT NULL,
|
|
124
|
+
is_workday INTEGER NOT NULL DEFAULT 0 CHECK (is_workday IN (0, 1)),
|
|
125
|
+
name TEXT
|
|
126
|
+
);
|
|
127
|
+
|
|
128
|
+
-- 系统配置表
|
|
129
|
+
CREATE TABLE IF NOT EXISTS system_config (
|
|
130
|
+
key TEXT PRIMARY KEY,
|
|
131
|
+
value TEXT NOT NULL,
|
|
132
|
+
description TEXT,
|
|
133
|
+
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
-- 初始系统配置
|
|
137
|
+
INSERT OR IGNORE INTO system_config (key, value, description) VALUES
|
|
138
|
+
('server_url', 'http://localhost:3000', '服务器 URL'),
|
|
139
|
+
('smtp_host', '', 'SMTP 服务器地址'),
|
|
140
|
+
('smtp_port', '587', 'SMTP 端口'),
|
|
141
|
+
('smtp_user', '', 'SMTP 用户名'),
|
|
142
|
+
('smtp_pass', '', 'SMTP 密码'),
|
|
143
|
+
('smtp_from', '', '发件人邮箱');
|
|
144
|
+
|
|
145
|
+
-- 索引
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_project_id ON tasks(project_id);
|
|
147
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_parent_id ON tasks(parent_id);
|
|
148
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_assignee_id ON tasks(assignee_id);
|
|
149
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_deleted_at ON tasks(deleted_at);
|
|
151
|
+
CREATE INDEX IF NOT EXISTS idx_task_history_task_id ON task_history(task_id);
|
|
152
|
+
CREATE INDEX IF NOT EXISTS idx_holidays_year ON holidays(year);
|
|
153
|
+
CREATE INDEX IF NOT EXISTS idx_sops_project_id ON sops(project_id);
|
|
154
|
+
CREATE INDEX IF NOT EXISTS idx_versions_archived_at ON versions(archived_at);
|
|
155
|
+
CREATE INDEX IF NOT EXISTS idx_user_tokens_user_id ON user_tokens(user_id);
|
|
156
|
+
CREATE INDEX IF NOT EXISTS idx_user_tokens_token ON user_tokens(token);
|
|
157
|
+
CREATE INDEX IF NOT EXISTS idx_projects_owner_id ON projects(owner_id);
|
|
158
|
+
|
|
159
|
+
-- 创建默认管理员用户
|
|
160
|
+
-- 注意:email、password_hash、is_first_login 等字段由迁移脚本处理
|
|
161
|
+
INSERT OR IGNORE INTO users (id, name, role)
|
|
162
|
+
VALUES ('admin-001', 'admin', 'admin');
|