Skip to content

Commit 48383db

Browse files
committed
feat: add run task record
1 parent 99a9f3b commit 48383db

File tree

4 files changed

+332
-262
lines changed

4 files changed

+332
-262
lines changed

src/server/model/task.ts

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import { WorkspaceAuditLogType, WorkspaceTaskEnum } from '@prisma/client';
2+
import { prisma } from './_client.js';
3+
import { createAuditLog } from './auditLog.js';
4+
5+
export async function runTask(
6+
workspaceId: string,
7+
type: string,
8+
taskFn: () => Promise<any>
9+
) {
10+
const task = await prisma.workspaceTask.create({
11+
data: {
12+
workspaceId,
13+
type,
14+
status: WorkspaceTaskEnum.Pending,
15+
},
16+
});
17+
18+
const start = Date.now();
19+
try {
20+
const result = await taskFn();
21+
const meta = { result, usageTime: Date.now() - start };
22+
await prisma.workspaceTask.update({
23+
where: {
24+
id: task.id,
25+
},
26+
data: {
27+
status: WorkspaceTaskEnum.Success,
28+
meta,
29+
},
30+
});
31+
createAuditLog({
32+
workspaceId,
33+
relatedId: task.id,
34+
relatedType: WorkspaceAuditLogType.Task,
35+
content: `Task ${type} success, result: ${JSON.stringify(meta)}`,
36+
});
37+
} catch (err) {
38+
const meta = { error: String(err), usageTime: Date.now() - start };
39+
await prisma.workspaceTask.update({
40+
where: {
41+
id: task.id,
42+
},
43+
data: {
44+
status: WorkspaceTaskEnum.Failed,
45+
meta,
46+
},
47+
});
48+
createAuditLog({
49+
workspaceId,
50+
relatedId: task.id,
51+
relatedType: WorkspaceAuditLogType.Task,
52+
content: `Task ${type} failed, result: ${JSON.stringify(meta)}`,
53+
});
54+
}
55+
}

0 commit comments

Comments
 (0)