@qq33357486/oh-my-task 1.4.0 → 1.4.1
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/README.md +121 -236
- package/dist/__tests__/auth-admin.test.d.ts +2 -0
- package/dist/__tests__/auth-admin.test.d.ts.map +1 -0
- package/dist/__tests__/auth-admin.test.js +440 -0
- package/dist/__tests__/auth-admin.test.js.map +1 -0
- package/dist/__tests__/auth-login-logout.test.d.ts +2 -0
- package/dist/__tests__/auth-login-logout.test.d.ts.map +1 -0
- package/dist/__tests__/auth-login-logout.test.js +400 -0
- package/dist/__tests__/auth-login-logout.test.js.map +1 -0
- package/dist/__tests__/auth-password.test.d.ts +2 -0
- package/dist/__tests__/auth-password.test.d.ts.map +1 -0
- package/dist/__tests__/auth-password.test.js +419 -0
- package/dist/__tests__/auth-password.test.js.map +1 -0
- package/dist/__tests__/auth-register.test.d.ts +2 -0
- package/dist/__tests__/auth-register.test.d.ts.map +1 -0
- package/dist/__tests__/auth-register.test.js +379 -0
- package/dist/__tests__/auth-register.test.js.map +1 -0
- package/dist/__tests__/auth-tokens.test.d.ts +2 -0
- package/dist/__tests__/auth-tokens.test.d.ts.map +1 -0
- package/dist/__tests__/auth-tokens.test.js +392 -0
- package/dist/__tests__/auth-tokens.test.js.map +1 -0
- package/dist/__tests__/db-schema.test.d.ts +2 -0
- package/dist/__tests__/db-schema.test.d.ts.map +1 -0
- package/dist/__tests__/db-schema.test.js +245 -0
- package/dist/__tests__/db-schema.test.js.map +1 -0
- package/dist/__tests__/express-server.test.d.ts +2 -0
- package/dist/__tests__/express-server.test.d.ts.map +1 -0
- package/dist/__tests__/express-server.test.js +119 -0
- package/dist/__tests__/express-server.test.js.map +1 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.d.ts +2 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.d.ts.map +1 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.js +270 -0
- package/dist/__tests__/fix-hcaptcha-dev-bypass.test.js.map +1 -0
- package/dist/__tests__/mcp/mcp-tools.test.d.ts +2 -0
- package/dist/__tests__/mcp/mcp-tools.test.d.ts.map +1 -0
- package/dist/__tests__/mcp/mcp-tools.test.js +547 -0
- package/dist/__tests__/mcp/mcp-tools.test.js.map +1 -0
- package/dist/__tests__/projects.test.d.ts +2 -0
- package/dist/__tests__/projects.test.d.ts.map +1 -0
- package/dist/__tests__/projects.test.js +406 -0
- package/dist/__tests__/projects.test.js.map +1 -0
- package/dist/__tests__/schedule.test.d.ts +2 -0
- package/dist/__tests__/schedule.test.d.ts.map +1 -0
- package/dist/__tests__/schedule.test.js +587 -0
- package/dist/__tests__/schedule.test.js.map +1 -0
- package/dist/__tests__/tasks-crud.test.d.ts +2 -0
- package/dist/__tests__/tasks-crud.test.d.ts.map +1 -0
- package/dist/__tests__/tasks-crud.test.js +606 -0
- package/dist/__tests__/tasks-crud.test.js.map +1 -0
- package/dist/__tests__/tasks-lifecycle.test.d.ts +2 -0
- package/dist/__tests__/tasks-lifecycle.test.d.ts.map +1 -0
- package/dist/__tests__/tasks-lifecycle.test.js +712 -0
- package/dist/__tests__/tasks-lifecycle.test.js.map +1 -0
- package/dist/__tests__/versions.test.d.ts +2 -0
- package/dist/__tests__/versions.test.d.ts.map +1 -0
- package/dist/__tests__/versions.test.js +613 -0
- package/dist/__tests__/versions.test.js.map +1 -0
- package/dist/api/middleware/auth.d.ts +1 -2
- package/dist/api/middleware/auth.d.ts.map +1 -1
- package/dist/api/middleware/auth.js +5 -12
- package/dist/api/middleware/auth.js.map +1 -1
- package/dist/api/middleware/captcha.d.ts +8 -0
- package/dist/api/middleware/captcha.d.ts.map +1 -1
- package/dist/api/middleware/captcha.js +29 -4
- package/dist/api/middleware/captcha.js.map +1 -1
- package/dist/api/middleware/ownerCheck.d.ts +0 -5
- package/dist/api/middleware/ownerCheck.d.ts.map +1 -1
- package/dist/api/middleware/ownerCheck.js +15 -49
- package/dist/api/middleware/ownerCheck.js.map +1 -1
- package/dist/api/routes/{sops.d.ts → admin.d.ts} +1 -1
- package/dist/api/routes/admin.d.ts.map +1 -0
- package/dist/api/routes/admin.js +20 -0
- package/dist/api/routes/admin.js.map +1 -0
- package/dist/api/routes/auth.d.ts.map +1 -1
- package/dist/api/routes/auth.js +65 -14
- package/dist/api/routes/auth.js.map +1 -1
- package/dist/api/routes/config.d.ts.map +1 -1
- package/dist/api/routes/config.js +6 -1
- package/dist/api/routes/config.js.map +1 -1
- package/dist/api/routes/projects.d.ts.map +1 -1
- package/dist/api/routes/projects.js +29 -18
- package/dist/api/routes/projects.js.map +1 -1
- package/dist/api/routes/tasks.d.ts.map +1 -1
- package/dist/api/routes/tasks.js +79 -104
- package/dist/api/routes/tasks.js.map +1 -1
- package/dist/api/routes/tokens.d.ts.map +1 -1
- package/dist/api/routes/tokens.js +11 -8
- package/dist/api/routes/tokens.js.map +1 -1
- package/dist/api/routes/users.d.ts.map +1 -1
- package/dist/api/routes/users.js +7 -59
- package/dist/api/routes/users.js.map +1 -1
- package/dist/api/routes/versions.d.ts.map +1 -1
- package/dist/api/routes/versions.js +63 -34
- package/dist/api/routes/versions.js.map +1 -1
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +23 -14
- package/dist/api/server.js.map +1 -1
- package/dist/db/connection.d.ts.map +1 -1
- package/dist/db/connection.js +40 -118
- package/dist/db/connection.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +15 -64
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/activate-task.d.ts.map +1 -1
- package/dist/mcp/tools/activate-task.js +3 -17
- package/dist/mcp/tools/activate-task.js.map +1 -1
- package/dist/mcp/tools/{get-next-task.d.ts → auto-schedule.d.ts} +3 -3
- package/dist/mcp/tools/auto-schedule.d.ts.map +1 -0
- package/dist/mcp/tools/auto-schedule.js +59 -0
- package/dist/mcp/tools/auto-schedule.js.map +1 -0
- package/dist/mcp/tools/complete-task.d.ts.map +1 -1
- package/dist/mcp/tools/complete-task.js +2 -12
- package/dist/mcp/tools/complete-task.js.map +1 -1
- package/dist/mcp/tools/create-task.d.ts.map +1 -1
- package/dist/mcp/tools/create-task.js +33 -38
- package/dist/mcp/tools/create-task.js.map +1 -1
- package/dist/mcp/tools/create-version.d.ts.map +1 -1
- package/dist/mcp/tools/create-version.js +2 -17
- package/dist/mcp/tools/create-version.js.map +1 -1
- package/dist/mcp/tools/{get-task-context.d.ts → get-current-task.d.ts} +3 -3
- package/dist/mcp/tools/get-current-task.d.ts.map +1 -0
- package/dist/mcp/tools/get-current-task.js +85 -0
- package/dist/mcp/tools/get-current-task.js.map +1 -0
- package/dist/mcp/tools/get-task.d.ts.map +1 -1
- package/dist/mcp/tools/get-task.js +7 -12
- package/dist/mcp/tools/get-task.js.map +1 -1
- package/dist/mcp/tools/init-project.d.ts +0 -2
- package/dist/mcp/tools/init-project.d.ts.map +1 -1
- package/dist/mcp/tools/init-project.js +39 -75
- package/dist/mcp/tools/init-project.js.map +1 -1
- package/dist/mcp/tools/list-tasks.d.ts.map +1 -1
- package/dist/mcp/tools/list-tasks.js +8 -33
- package/dist/mcp/tools/list-tasks.js.map +1 -1
- package/dist/mcp/tools/list-versions.d.ts.map +1 -1
- package/dist/mcp/tools/list-versions.js +16 -25
- package/dist/mcp/tools/list-versions.js.map +1 -1
- package/dist/mcp/tools/utils/config.js +1 -1
- package/dist/mcp/tools/utils/config.js.map +1 -1
- package/dist/services/admin.service.d.ts +27 -0
- package/dist/services/admin.service.d.ts.map +1 -0
- package/dist/services/admin.service.js +88 -0
- package/dist/services/admin.service.js.map +1 -0
- package/dist/services/config.service.d.ts +1 -0
- package/dist/services/config.service.d.ts.map +1 -1
- package/dist/services/config.service.js +7 -0
- package/dist/services/config.service.js.map +1 -1
- package/dist/services/project.service.d.ts +7 -7
- package/dist/services/project.service.d.ts.map +1 -1
- package/dist/services/project.service.js +47 -40
- package/dist/services/project.service.js.map +1 -1
- package/dist/services/schedule.service.d.ts +6 -0
- package/dist/services/schedule.service.d.ts.map +1 -1
- package/dist/services/schedule.service.js +36 -12
- package/dist/services/schedule.service.js.map +1 -1
- package/dist/services/task.service.d.ts +6 -18
- package/dist/services/task.service.d.ts.map +1 -1
- package/dist/services/task.service.js +161 -194
- package/dist/services/task.service.js.map +1 -1
- package/dist/services/token.service.d.ts +1 -0
- package/dist/services/token.service.d.ts.map +1 -1
- package/dist/services/token.service.js +5 -2
- package/dist/services/token.service.js.map +1 -1
- package/dist/services/user.service.d.ts +0 -32
- package/dist/services/user.service.d.ts.map +1 -1
- package/dist/services/user.service.js +13 -110
- package/dist/services/user.service.js.map +1 -1
- package/dist/services/version.service.d.ts +26 -8
- package/dist/services/version.service.d.ts.map +1 -1
- package/dist/services/version.service.js +149 -41
- package/dist/services/version.service.js.map +1 -1
- package/dist/types/index.d.ts +17 -60
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +4 -13
- package/src/db/schema.sql +113 -70
- package/dist/api/routes/sops.d.ts.map +0 -1
- package/dist/api/routes/sops.js +0 -155
- package/dist/api/routes/sops.js.map +0 -1
- package/dist/mcp/tools/add-task-note.d.ts +0 -10
- package/dist/mcp/tools/add-task-note.d.ts.map +0 -1
- package/dist/mcp/tools/add-task-note.js +0 -46
- package/dist/mcp/tools/add-task-note.js.map +0 -1
- package/dist/mcp/tools/approve-task.d.ts +0 -10
- package/dist/mcp/tools/approve-task.d.ts.map +0 -1
- package/dist/mcp/tools/approve-task.js +0 -59
- package/dist/mcp/tools/approve-task.js.map +0 -1
- package/dist/mcp/tools/archive-version.d.ts +0 -10
- package/dist/mcp/tools/archive-version.d.ts.map +0 -1
- package/dist/mcp/tools/archive-version.js +0 -57
- package/dist/mcp/tools/archive-version.js.map +0 -1
- package/dist/mcp/tools/assign-task.d.ts +0 -10
- package/dist/mcp/tools/assign-task.d.ts.map +0 -1
- package/dist/mcp/tools/assign-task.js +0 -53
- package/dist/mcp/tools/assign-task.js.map +0 -1
- package/dist/mcp/tools/create-sop.d.ts +0 -10
- package/dist/mcp/tools/create-sop.d.ts.map +0 -1
- package/dist/mcp/tools/create-sop.js +0 -90
- package/dist/mcp/tools/create-sop.js.map +0 -1
- package/dist/mcp/tools/get-my-tasks.d.ts +0 -10
- package/dist/mcp/tools/get-my-tasks.d.ts.map +0 -1
- package/dist/mcp/tools/get-my-tasks.js +0 -88
- package/dist/mcp/tools/get-my-tasks.js.map +0 -1
- package/dist/mcp/tools/get-next-task.d.ts.map +0 -1
- package/dist/mcp/tools/get-next-task.js +0 -84
- package/dist/mcp/tools/get-next-task.js.map +0 -1
- package/dist/mcp/tools/get-sop.d.ts +0 -10
- package/dist/mcp/tools/get-sop.d.ts.map +0 -1
- package/dist/mcp/tools/get-sop.js +0 -67
- package/dist/mcp/tools/get-sop.js.map +0 -1
- package/dist/mcp/tools/get-task-context.d.ts.map +0 -1
- package/dist/mcp/tools/get-task-context.js +0 -114
- package/dist/mcp/tools/get-task-context.js.map +0 -1
- package/dist/mcp/tools/helpers.d.ts +0 -10
- package/dist/mcp/tools/helpers.d.ts.map +0 -1
- package/dist/mcp/tools/helpers.js +0 -17
- package/dist/mcp/tools/helpers.js.map +0 -1
- package/dist/mcp/tools/list-sops.d.ts +0 -10
- package/dist/mcp/tools/list-sops.d.ts.map +0 -1
- package/dist/mcp/tools/list-sops.js +0 -57
- package/dist/mcp/tools/list-sops.js.map +0 -1
- package/dist/mcp/tools/reject-task.d.ts +0 -10
- package/dist/mcp/tools/reject-task.d.ts.map +0 -1
- package/dist/mcp/tools/reject-task.js +0 -63
- package/dist/mcp/tools/reject-task.js.map +0 -1
- package/dist/mcp/tools/reschedule.d.ts +0 -17
- package/dist/mcp/tools/reschedule.d.ts.map +0 -1
- package/dist/mcp/tools/reschedule.js +0 -107
- package/dist/mcp/tools/reschedule.js.map +0 -1
- package/dist/mcp/tools/start-task.d.ts +0 -10
- package/dist/mcp/tools/start-task.d.ts.map +0 -1
- package/dist/mcp/tools/start-task.js +0 -42
- package/dist/mcp/tools/start-task.js.map +0 -1
- package/dist/mcp/tools/submit-for-review.d.ts +0 -10
- package/dist/mcp/tools/submit-for-review.d.ts.map +0 -1
- package/dist/mcp/tools/submit-for-review.js +0 -64
- package/dist/mcp/tools/submit-for-review.js.map +0 -1
- package/dist/mcp/tools/update-sop.d.ts +0 -10
- package/dist/mcp/tools/update-sop.d.ts.map +0 -1
- package/dist/mcp/tools/update-sop.js +0 -113
- package/dist/mcp/tools/update-sop.js.map +0 -1
- package/dist/mcp/tools/update-task-doc.d.ts +0 -10
- package/dist/mcp/tools/update-task-doc.d.ts.map +0 -1
- package/dist/mcp/tools/update-task-doc.js +0 -70
- package/dist/mcp/tools/update-task-doc.js.map +0 -1
- package/dist/mcp/tools/update-task.d.ts +0 -10
- package/dist/mcp/tools/update-task.d.ts.map +0 -1
- package/dist/mcp/tools/update-task.js +0 -106
- package/dist/mcp/tools/update-task.js.map +0 -1
- package/dist/services/sop.service.d.ts +0 -53
- package/dist/services/sop.service.d.ts.map +0 -1
- package/dist/services/sop.service.js +0 -275
- package/dist/services/sop.service.js.map +0 -1
|
@@ -10,18 +10,15 @@ router.get('/', (req, res) => {
|
|
|
10
10
|
res.status(400).json({ success: false, error: 'project_id 不能为空' });
|
|
11
11
|
return;
|
|
12
12
|
}
|
|
13
|
-
const userId = req.auth
|
|
14
|
-
const isAdmin = req.auth?.user?.role === 'admin';
|
|
13
|
+
const userId = req.auth.user.id;
|
|
15
14
|
// 验证项目归属
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
15
|
+
const hasAccess = projectService.checkProjectOwnership(projectId, userId);
|
|
16
|
+
if (!hasAccess) {
|
|
17
|
+
res.status(404).json({ success: false, error: '项目不存在' });
|
|
18
|
+
return;
|
|
22
19
|
}
|
|
23
20
|
// 只返回未归档的版本
|
|
24
|
-
const versions = versionService.listVersions(projectId,
|
|
21
|
+
const versions = versionService.listVersions(projectId, userId).filter(v => !v.archived_at);
|
|
25
22
|
res.json({ success: true, data: versions });
|
|
26
23
|
});
|
|
27
24
|
// PUT /api/versions/reorder - 重新排序版本 (must be before /:id)
|
|
@@ -31,16 +28,21 @@ router.put('/reorder', (req, res) => {
|
|
|
31
28
|
res.status(400).json({ success: false, error: 'version_ids 必须是数组' });
|
|
32
29
|
return;
|
|
33
30
|
}
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
const userId = req.auth.user.id;
|
|
32
|
+
try {
|
|
33
|
+
versionService.reorderVersions(version_ids, userId);
|
|
34
|
+
res.json({ success: true, message: '版本排序已更新' });
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
res.status(403).json({ success: false, error: error.message });
|
|
38
|
+
}
|
|
36
39
|
});
|
|
37
40
|
// GET /api/versions/:id/stats - 获取版本统计信息
|
|
38
41
|
router.get('/:id/stats', async (req, res) => {
|
|
39
|
-
const userId = req.auth
|
|
40
|
-
const isAdmin = req.auth?.user?.role === 'admin';
|
|
42
|
+
const userId = req.auth.user.id;
|
|
41
43
|
try {
|
|
42
44
|
// 验证归属
|
|
43
|
-
const version = versionService.getVersionById(req.params.id,
|
|
45
|
+
const version = versionService.getVersionById(req.params.id, userId);
|
|
44
46
|
if (!version) {
|
|
45
47
|
res.status(404).json({ success: false, error: '版本不存在' });
|
|
46
48
|
return;
|
|
@@ -58,9 +60,8 @@ router.get('/:id/stats', async (req, res) => {
|
|
|
58
60
|
});
|
|
59
61
|
// GET /api/versions/:id - 获取版本详情
|
|
60
62
|
router.get('/:id', (req, res) => {
|
|
61
|
-
const userId = req.auth
|
|
62
|
-
const
|
|
63
|
-
const version = versionService.getVersionById(req.params.id, isAdmin ? undefined : userId);
|
|
63
|
+
const userId = req.auth.user.id;
|
|
64
|
+
const version = versionService.getVersionById(req.params.id, userId);
|
|
64
65
|
if (!version) {
|
|
65
66
|
res.status(404).json({ success: false, error: '版本不存在' });
|
|
66
67
|
return;
|
|
@@ -71,7 +72,6 @@ router.get('/:id', (req, res) => {
|
|
|
71
72
|
router.post('/', (req, res) => {
|
|
72
73
|
const { project_id, name, description, start_date, due_date } = req.body;
|
|
73
74
|
const userId = req.auth.user.id;
|
|
74
|
-
const isAdmin = req.auth.user.role === 'admin';
|
|
75
75
|
if (!project_id) {
|
|
76
76
|
res.status(400).json({ success: false, error: 'project_id 不能为空' });
|
|
77
77
|
return;
|
|
@@ -81,12 +81,10 @@ router.post('/', (req, res) => {
|
|
|
81
81
|
return;
|
|
82
82
|
}
|
|
83
83
|
// 验证项目归属
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
84
|
+
const hasAccess = projectService.checkProjectOwnership(project_id, userId);
|
|
85
|
+
if (!hasAccess) {
|
|
86
|
+
res.status(404).json({ success: false, error: '项目不存在' });
|
|
87
|
+
return;
|
|
90
88
|
}
|
|
91
89
|
const version = versionService.createVersion({
|
|
92
90
|
project_id,
|
|
@@ -94,7 +92,7 @@ router.post('/', (req, res) => {
|
|
|
94
92
|
description,
|
|
95
93
|
start_date,
|
|
96
94
|
due_date,
|
|
97
|
-
},
|
|
95
|
+
}, userId);
|
|
98
96
|
if (!version) {
|
|
99
97
|
res.status(404).json({ success: false, error: '项目不存在' });
|
|
100
98
|
return;
|
|
@@ -105,24 +103,58 @@ router.post('/', (req, res) => {
|
|
|
105
103
|
router.put('/:id', (req, res) => {
|
|
106
104
|
const { name, description, start_date, due_date } = req.body;
|
|
107
105
|
const userId = req.auth.user.id;
|
|
108
|
-
const isAdmin = req.auth.user.role === 'admin';
|
|
109
106
|
const version = versionService.updateVersion(req.params.id, {
|
|
110
107
|
name,
|
|
111
108
|
description,
|
|
112
109
|
start_date,
|
|
113
110
|
due_date,
|
|
114
|
-
},
|
|
111
|
+
}, userId);
|
|
115
112
|
if (!version) {
|
|
116
113
|
res.status(404).json({ success: false, error: '版本不存在' });
|
|
117
114
|
return;
|
|
118
115
|
}
|
|
119
116
|
res.json({ success: true, data: version });
|
|
120
117
|
});
|
|
118
|
+
// POST /api/versions/:id/start - 开始版本(锁定)
|
|
119
|
+
router.post('/:id/start', (req, res) => {
|
|
120
|
+
const userId = req.auth.user.id;
|
|
121
|
+
// 验证归属
|
|
122
|
+
const version = versionService.getVersionById(req.params.id, userId);
|
|
123
|
+
if (!version) {
|
|
124
|
+
res.status(404).json({ success: false, error: '版本不存在' });
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
try {
|
|
128
|
+
const result = versionService.startVersion(req.params.id);
|
|
129
|
+
res.json({ success: true, data: result });
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
const err = error;
|
|
133
|
+
res.status(err.statusCode || 500).json({ success: false, error: err.message });
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
// POST /api/versions/:id/complete - 完成版本
|
|
137
|
+
router.post('/:id/complete', (req, res) => {
|
|
138
|
+
const userId = req.auth.user.id;
|
|
139
|
+
// 验证归属
|
|
140
|
+
const version = versionService.getVersionById(req.params.id, userId);
|
|
141
|
+
if (!version) {
|
|
142
|
+
res.status(404).json({ success: false, error: '版本不存在' });
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const result = versionService.completeVersion(req.params.id);
|
|
147
|
+
res.json({ success: true, data: result });
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
const err = error;
|
|
151
|
+
res.status(err.statusCode || 500).json({ success: false, error: err.message });
|
|
152
|
+
}
|
|
153
|
+
});
|
|
121
154
|
// POST /api/versions/:id/archive - 归档版本
|
|
122
155
|
router.post('/:id/archive', (req, res) => {
|
|
123
156
|
const userId = req.auth.user.id;
|
|
124
|
-
const
|
|
125
|
-
const version = versionService.getVersionById(req.params.id, isAdmin ? undefined : userId);
|
|
157
|
+
const version = versionService.getVersionById(req.params.id, userId);
|
|
126
158
|
if (!version) {
|
|
127
159
|
res.status(404).json({ success: false, error: '版本不存在' });
|
|
128
160
|
return;
|
|
@@ -131,21 +163,18 @@ router.post('/:id/archive', (req, res) => {
|
|
|
131
163
|
const now = new Date().toISOString();
|
|
132
164
|
// 标记版本为归档
|
|
133
165
|
db.prepare('UPDATE versions SET archived_at = ?, updated_at = ? WHERE id = ?').run(now, now, req.params.id);
|
|
134
|
-
// 软删除该版本下的所有任务
|
|
135
|
-
const result = db.prepare('UPDATE tasks SET deleted_at = ?, updated_at = ? WHERE version_id = ? AND deleted_at IS NULL').run(now, now, req.params.id);
|
|
136
166
|
res.json({
|
|
137
167
|
success: true,
|
|
138
168
|
data: {
|
|
169
|
+
id: version.id,
|
|
139
170
|
name: version.name,
|
|
140
|
-
tasks_archived: result.changes
|
|
141
171
|
}
|
|
142
172
|
});
|
|
143
173
|
});
|
|
144
174
|
// DELETE /api/versions/:id - 删除版本
|
|
145
175
|
router.delete('/:id', (req, res) => {
|
|
146
176
|
const userId = req.auth.user.id;
|
|
147
|
-
const
|
|
148
|
-
const success = versionService.deleteVersion(req.params.id, isAdmin ? undefined : userId);
|
|
177
|
+
const success = versionService.deleteVersion(req.params.id, userId);
|
|
149
178
|
if (!success) {
|
|
150
179
|
res.status(404).json({ success: false, error: '版本不存在' });
|
|
151
180
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/api/routes/versions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,cAAc,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,cAAc,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAE/C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;AAExB,gCAAgC;AAChC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,UAAoB,CAAC;IACjD,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../../src/api/routes/versions.ts"],"names":[],"mappings":"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"}
|
package/dist/api/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAqBA,QAAA,MAAM,GAAG,6CAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAqBA,QAAA,MAAM,GAAG,6CAAY,CAAC;AA0DtB,wBAAgB,cAAc,IAAI,IAAI,CASrC;AAED,eAAe,GAAG,CAAC"}
|
package/dist/api/server.js
CHANGED
|
@@ -12,24 +12,25 @@ import usersRouter from './routes/users.js';
|
|
|
12
12
|
import projectsRouter from './routes/projects.js';
|
|
13
13
|
import tasksRouter from './routes/tasks.js';
|
|
14
14
|
import versionsRouter from './routes/versions.js';
|
|
15
|
-
import sopsRouter from './routes/sops.js';
|
|
16
15
|
import scheduleRouter from './routes/schedule.js';
|
|
17
16
|
import configRouter from './routes/config.js';
|
|
17
|
+
import adminRouter from './routes/admin.js';
|
|
18
18
|
const __filename = fileURLToPath(import.meta.url);
|
|
19
19
|
const __dirname = dirname(__filename);
|
|
20
20
|
const app = express();
|
|
21
21
|
const PORT = process.env.API_PORT || 3000;
|
|
22
|
-
//
|
|
22
|
+
// CORS 配置
|
|
23
23
|
app.use(cors({
|
|
24
24
|
origin: process.env.FRONTEND_URL || 'http://localhost:5173',
|
|
25
|
-
credentials: true
|
|
25
|
+
credentials: true
|
|
26
26
|
}));
|
|
27
|
+
// JSON body parser
|
|
27
28
|
app.use(express.json());
|
|
28
|
-
// Session
|
|
29
|
+
// Session 中间件(SQLite session store)
|
|
29
30
|
app.use(createSessionMiddleware());
|
|
30
|
-
//
|
|
31
|
-
app.get('/health', (_req, res) => {
|
|
32
|
-
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
|
31
|
+
// 健康检查端点(无需认证)
|
|
32
|
+
app.get('/api/health', (_req, res) => {
|
|
33
|
+
res.json({ success: true, data: { status: 'ok', timestamp: new Date().toISOString() } });
|
|
33
34
|
});
|
|
34
35
|
// 认证路由(无需认证)
|
|
35
36
|
app.use('/api/auth', authRouter);
|
|
@@ -38,26 +39,34 @@ app.use('/api/tokens', authMiddleware, tokensRouter);
|
|
|
38
39
|
app.use('/api/users', authMiddleware, usersRouter);
|
|
39
40
|
app.use('/api/projects', authMiddleware, projectsRouter);
|
|
40
41
|
app.use('/api/versions', authMiddleware, versionsRouter);
|
|
41
|
-
app.use('/api/sops', authMiddleware, sopsRouter);
|
|
42
42
|
app.use('/api/tasks', authMiddleware, tasksRouter);
|
|
43
43
|
app.use('/api/schedule', authMiddleware, scheduleRouter);
|
|
44
44
|
app.use('/api/config', authMiddleware, configRouter);
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
app.use('/api/admin', authMiddleware, adminRouter);
|
|
46
|
+
// 静态文件服务(前端生产构建产物)
|
|
47
|
+
// 支持两种部署模式:
|
|
48
|
+
// 1. 开发模式:web/dist 在项目根目录的 web/ 下(../../web/dist)
|
|
49
|
+
// 2. Docker 生产模式:web/dist 在 app/web/dist 下,通过 WEB_DIST_PATH 环境变量指定
|
|
50
|
+
const webDistPath = process.env.WEB_DIST_PATH || join(__dirname, '../../web/dist');
|
|
47
51
|
if (existsSync(webDistPath)) {
|
|
48
52
|
app.use(express.static(webDistPath));
|
|
53
|
+
// 仅对非 API 路由返回 index.html(SPA fallback)
|
|
49
54
|
app.get('*', (_req, res) => {
|
|
55
|
+
if (_req.path.startsWith('/api/')) {
|
|
56
|
+
res.status(404).json({ success: false, error: 'Not found' });
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
50
59
|
res.sendFile(join(webDistPath, 'index.html'));
|
|
51
60
|
});
|
|
52
61
|
}
|
|
53
|
-
//
|
|
62
|
+
// 全局错误处理
|
|
54
63
|
app.use((err, _req, res, _next) => {
|
|
55
|
-
console.error('
|
|
56
|
-
|
|
64
|
+
console.error('Unhandled error:', err);
|
|
65
|
+
const statusCode = err.statusCode || 500;
|
|
66
|
+
res.status(statusCode).json({ success: false, error: err.message || 'Internal server error' });
|
|
57
67
|
});
|
|
58
68
|
// 启动服务器
|
|
59
69
|
export function startApiServer() {
|
|
60
|
-
// 初始化数据库
|
|
61
70
|
initDb();
|
|
62
71
|
app.listen(PORT, () => {
|
|
63
72
|
console.log(`API Server running on http://localhost:${PORT}`);
|
package/dist/api/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,YAAY,MAAM,oBAAoB,CAAC;AAC9C,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,WAAW,MAAM,mBAAmB,CAAC;AAC5C,OAAO,cAAc,MAAM,sBAAsB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/api/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAkBtC;;GAEG;AACH,wBAAgB,KAAK,IAAI,QAAQ,CAAC,QAAQ,CAYzC;AAED;;GAEG;AACH,wBAAgB,MAAM,IAAI,IAAI,CAkC7B;AAED;;GAEG;AACH,wBAAgB,OAAO,IAAI,IAAI,CAM9B;AAED,eAAe,KAAK,CAAC"}
|
package/dist/db/connection.js
CHANGED
|
@@ -2,20 +2,32 @@ import Database from 'better-sqlite3';
|
|
|
2
2
|
import { fileURLToPath } from 'url';
|
|
3
3
|
import { dirname, join } from 'path';
|
|
4
4
|
import { readFileSync } from 'fs';
|
|
5
|
+
import { mkdirSync } from 'fs';
|
|
5
6
|
const __filename = fileURLToPath(import.meta.url);
|
|
6
7
|
const __dirname = dirname(__filename);
|
|
7
8
|
// 数据库文件路径
|
|
8
|
-
|
|
9
|
+
function getDbPath() {
|
|
10
|
+
return process.env.DB_PATH || join(__dirname, '../../data/data.db');
|
|
11
|
+
}
|
|
9
12
|
// 单例数据库连接
|
|
10
13
|
let db = null;
|
|
14
|
+
let currentDbPath = null;
|
|
11
15
|
/**
|
|
12
16
|
* 获取数据库连接
|
|
13
17
|
*/
|
|
14
18
|
export function getDb() {
|
|
15
|
-
|
|
16
|
-
|
|
19
|
+
const dbPath = getDbPath();
|
|
20
|
+
if (!db || currentDbPath !== dbPath) {
|
|
21
|
+
if (db) {
|
|
22
|
+
try {
|
|
23
|
+
db.close();
|
|
24
|
+
}
|
|
25
|
+
catch { /* ignore */ }
|
|
26
|
+
}
|
|
27
|
+
db = new Database(dbPath);
|
|
17
28
|
db.pragma('journal_mode = WAL');
|
|
18
29
|
db.pragma('foreign_keys = ON');
|
|
30
|
+
currentDbPath = dbPath;
|
|
19
31
|
}
|
|
20
32
|
return db;
|
|
21
33
|
}
|
|
@@ -23,127 +35,36 @@ export function getDb() {
|
|
|
23
35
|
* 初始化数据库(创建表)
|
|
24
36
|
*/
|
|
25
37
|
export function initDb() {
|
|
38
|
+
// 确保数据目录存在
|
|
39
|
+
const dbDir = dirname(getDbPath());
|
|
40
|
+
mkdirSync(dbDir, { recursive: true });
|
|
26
41
|
const database = getDb();
|
|
27
42
|
const schemaPath = join(__dirname, 'schema.sql');
|
|
28
43
|
const schema = readFileSync(schemaPath, 'utf-8');
|
|
29
44
|
database.exec(schema);
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
if (!columnNames.includes('current_status')) {
|
|
50
|
-
database.exec('ALTER TABLE tasks ADD COLUMN current_status TEXT');
|
|
51
|
-
console.log('Migration: Added current_status column');
|
|
52
|
-
}
|
|
53
|
-
// 迁移 2: 添加 SOP 关联字段和软删除
|
|
54
|
-
if (!columnNames.includes('sop_id')) {
|
|
55
|
-
database.exec('ALTER TABLE tasks ADD COLUMN sop_id TEXT');
|
|
56
|
-
console.log('Migration: Added sop_id column');
|
|
45
|
+
// 修复 sessions 表:确保列结构与 better-sqlite3-session-store 兼容
|
|
46
|
+
// 如果表存在但缺少 expire 列,需要重建
|
|
47
|
+
try {
|
|
48
|
+
const columns = database.prepare('PRAGMA table_info(sessions)').all();
|
|
49
|
+
const columnNames = columns.map(c => c.name);
|
|
50
|
+
if (!columnNames.includes('expire') || columnNames.includes('expired')) {
|
|
51
|
+
console.log('Migrating sessions table to match better-sqlite3-session-store schema...');
|
|
52
|
+
// 备份数据(如果有的话)
|
|
53
|
+
database.exec('DROP TABLE IF EXISTS sessions');
|
|
54
|
+
database.exec(`
|
|
55
|
+
CREATE TABLE sessions (
|
|
56
|
+
sid TEXT NOT NULL PRIMARY KEY,
|
|
57
|
+
sess TEXT NOT NULL,
|
|
58
|
+
expire TEXT NOT NULL DEFAULT ''
|
|
59
|
+
)
|
|
60
|
+
`);
|
|
61
|
+
console.log('Sessions table migrated successfully');
|
|
62
|
+
}
|
|
57
63
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
console.log('Migration: Added deleted_at column');
|
|
61
|
-
}
|
|
62
|
-
// 迁移 3: 版本表添加归档字段
|
|
63
|
-
const versionColumns = database.prepare("PRAGMA table_info(versions)").all();
|
|
64
|
-
const versionColumnNames = versionColumns.map(c => c.name);
|
|
65
|
-
if (!versionColumnNames.includes('archived_at')) {
|
|
66
|
-
database.exec('ALTER TABLE versions ADD COLUMN archived_at DATETIME DEFAULT NULL');
|
|
67
|
-
console.log('Migration: Added archived_at column to versions');
|
|
68
|
-
}
|
|
69
|
-
// 迁移 4: 创建 SOP 表(如果不存在)
|
|
70
|
-
database.exec(`
|
|
71
|
-
CREATE TABLE IF NOT EXISTS sops (
|
|
72
|
-
id TEXT PRIMARY KEY,
|
|
73
|
-
project_id TEXT NOT NULL,
|
|
74
|
-
name TEXT NOT NULL,
|
|
75
|
-
description TEXT,
|
|
76
|
-
rules TEXT DEFAULT '',
|
|
77
|
-
workflow TEXT DEFAULT '',
|
|
78
|
-
required TEXT DEFAULT '',
|
|
79
|
-
forbidden TEXT DEFAULT '',
|
|
80
|
-
experience TEXT DEFAULT '',
|
|
81
|
-
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
82
|
-
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
|
83
|
-
FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE
|
|
84
|
-
)
|
|
85
|
-
`);
|
|
86
|
-
// 迁移 5: 创建索引
|
|
87
|
-
database.exec(`CREATE INDEX IF NOT EXISTS idx_sops_project_id ON sops(project_id)`);
|
|
88
|
-
database.exec(`CREATE INDEX IF NOT EXISTS idx_tasks_deleted_at ON tasks(deleted_at)`);
|
|
89
|
-
database.exec(`CREATE INDEX IF NOT EXISTS idx_versions_archived_at ON versions(archived_at)`);
|
|
90
|
-
// 迁移 6: 将旧状态迁移到新状态
|
|
91
|
-
// todo/blocked/review/cancelled -> planned, in_progress -> in_progress, done -> done
|
|
92
|
-
database.exec(`
|
|
93
|
-
UPDATE tasks SET status = 'planned' WHERE status IN ('todo', 'blocked', 'review', 'cancelled')
|
|
94
|
-
`);
|
|
95
|
-
console.log('Migration: Migrated old task statuses to new status values');
|
|
96
|
-
// 迁移 7: 用户表添加首次登录和密码重置字段
|
|
97
|
-
const userColumns = database.prepare("PRAGMA table_info(users)").all();
|
|
98
|
-
const userColumnNames = userColumns.map(c => c.name);
|
|
99
|
-
if (!userColumnNames.includes('is_first_login')) {
|
|
100
|
-
database.exec('ALTER TABLE users ADD COLUMN is_first_login INTEGER NOT NULL DEFAULT 0 CHECK (is_first_login IN (0, 1))');
|
|
101
|
-
console.log('Migration: Added is_first_login column to users');
|
|
102
|
-
}
|
|
103
|
-
if (!userColumnNames.includes('reset_token')) {
|
|
104
|
-
database.exec('ALTER TABLE users ADD COLUMN reset_token TEXT');
|
|
105
|
-
console.log('Migration: Added reset_token column to users');
|
|
106
|
-
}
|
|
107
|
-
if (!userColumnNames.includes('reset_token_expires')) {
|
|
108
|
-
database.exec('ALTER TABLE users ADD COLUMN reset_token_expires DATETIME');
|
|
109
|
-
console.log('Migration: Added reset_token_expires column to users');
|
|
110
|
-
}
|
|
111
|
-
// 迁移 8: 创建系统配置表
|
|
112
|
-
database.exec(`
|
|
113
|
-
CREATE TABLE IF NOT EXISTS system_config (
|
|
114
|
-
key TEXT PRIMARY KEY,
|
|
115
|
-
value TEXT NOT NULL,
|
|
116
|
-
description TEXT,
|
|
117
|
-
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
|
118
|
-
)
|
|
119
|
-
`);
|
|
120
|
-
// 插入默认系统配置
|
|
121
|
-
const configDefaults = [
|
|
122
|
-
['server_url', 'http://localhost:3000', '服务器 URL'],
|
|
123
|
-
['smtp_host', '', 'SMTP 服务器地址'],
|
|
124
|
-
['smtp_port', '587', 'SMTP 端口'],
|
|
125
|
-
['smtp_user', '', 'SMTP 用户名'],
|
|
126
|
-
['smtp_pass', '', 'SMTP 密码'],
|
|
127
|
-
['smtp_from', '', '发件人邮箱'],
|
|
128
|
-
];
|
|
129
|
-
const insertConfig = database.prepare(`
|
|
130
|
-
INSERT OR IGNORE INTO system_config (key, value, description) VALUES (?, ?, ?)
|
|
131
|
-
`);
|
|
132
|
-
for (const [key, value, desc] of configDefaults) {
|
|
133
|
-
insertConfig.run(key, value, desc);
|
|
134
|
-
}
|
|
135
|
-
console.log('Migration: Created system_config table with defaults');
|
|
136
|
-
// 迁移 9: 创建重置令牌索引
|
|
137
|
-
database.exec(`CREATE INDEX IF NOT EXISTS idx_users_reset_token ON users(reset_token)`);
|
|
138
|
-
// 迁移 10: 更新默认管理员用户
|
|
139
|
-
const adminUser = database.prepare(`SELECT id FROM users WHERE id = 'admin-001'`).get();
|
|
140
|
-
if (adminUser) {
|
|
141
|
-
database.exec(`
|
|
142
|
-
UPDATE users SET is_first_login = 1, email = COALESCE(email, 'admin@example.com')
|
|
143
|
-
WHERE id = 'admin-001' AND (email IS NULL OR email = '' OR email = 'admin@example.com')
|
|
144
|
-
`);
|
|
145
|
-
console.log('Migration: Updated admin user for first login');
|
|
64
|
+
catch {
|
|
65
|
+
// sessions 表不存在,忽略
|
|
146
66
|
}
|
|
67
|
+
console.log('Database initialized successfully');
|
|
147
68
|
}
|
|
148
69
|
/**
|
|
149
70
|
* 关闭数据库连接
|
|
@@ -152,6 +73,7 @@ export function closeDb() {
|
|
|
152
73
|
if (db) {
|
|
153
74
|
db.close();
|
|
154
75
|
db = null;
|
|
76
|
+
currentDbPath = null;
|
|
155
77
|
}
|
|
156
78
|
}
|
|
157
79
|
export default getDb;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/db/connection.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAsGA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAIpD"}
|