Skip to content

Commit 1979809

Browse files
committed
feat(api): 添加服务编排开放API并升级SDK依赖
- 在flexmodel-server中新增OpenFlowResource实现流程运行态API - 升级flexmodel-functions-runtime中的@flexmodel/sdk依赖从0.0.7到0.0.8 - 更新deno.lock文件中的SDK版本信息 - 在文档中补充边缘函数、对象存储、GraphQL和服务编排功能说明 - 添加管理后台API相关文档和使用示例
1 parent 78f047b commit 1979809

7 files changed

Lines changed: 144 additions & 9 deletions

File tree

‎flexmodel-functions-runtime/deno.json‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"hono": "jsr:@hono/hono@^4.6.0",
1515
"@std/assert": "jsr:@std/assert@^1.0.0",
1616
"@std/testing": "jsr:@std/testing@^1.0.0",
17-
"@flexmodel/sdk": "npm:@flexmodel/sdk@0.0.7",
17+
"@flexmodel/sdk": "npm:@flexmodel/sdk@0.0.8",
1818
"jose": "npm:jose@^5.9.0"
1919
},
2020
"compilerOptions": {

‎flexmodel-functions-runtime/deno.lock‎

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎flexmodel-functions-runtime/src/runner/registry.ts‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ self.addEventListener("message", async (e) => {
179179
function generateFunctionDenoJson(): string {
180180
return JSON.stringify({
181181
imports: {
182-
"@flexmodel/sdk": "npm:@flexmodel/sdk@0.0.7",
182+
"@flexmodel/sdk": "npm:@flexmodel/sdk@0.0.8",
183183
},
184184
}, null, 2);
185185
}
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
package dev.flexmodel.open;
2+
3+
import dev.flexmodel.codegen.entity.FlowInstance;
4+
import dev.flexmodel.common.dto.PageDTO;
5+
import dev.flexmodel.flow.dto.FlowInstanceListRequest;
6+
import dev.flexmodel.flow.dto.FlowInstanceResponse;
7+
import dev.flexmodel.flow.dto.bo.ElementInstance;
8+
import dev.flexmodel.flow.dto.bo.NodeInstance;
9+
import dev.flexmodel.flow.dto.param.CommitTaskParam;
10+
import dev.flexmodel.flow.dto.param.RollbackTaskParam;
11+
import dev.flexmodel.flow.dto.param.StartProcessParam;
12+
import dev.flexmodel.flow.dto.result.CommitTaskResult;
13+
import dev.flexmodel.flow.dto.result.RollbackTaskResult;
14+
import dev.flexmodel.flow.dto.result.StartProcessResult;
15+
import dev.flexmodel.flow.dto.result.TerminateResult;
16+
import dev.flexmodel.flow.service.FlowExecutionService;
17+
import dev.flexmodel.flow.service.FlowInstanceService;
18+
import jakarta.enterprise.context.ApplicationScoped;
19+
import jakarta.inject.Inject;
20+
import jakarta.ws.rs.*;
21+
import jakarta.ws.rs.core.MediaType;
22+
23+
import java.util.List;
24+
25+
/**
26+
* Open API — 服务编排(流程运行态)。
27+
* <p>
28+
* 路径前缀 {@code /open/{projectId}/flows},面向终端用户(IdP 用户 / open scope API Key)。
29+
* 仅暴露运行态接口(启动/提交/回滚/查询/终止),不暴露设计态接口
30+
* (流程定义的增删改查与部署,参见 admin {@code FlowDefinitionResource})。
31+
*
32+
* @author cjbi
33+
*/
34+
@ApplicationScoped
35+
@Path("/open/{projectId}/flows")
36+
@Produces(MediaType.APPLICATION_JSON)
37+
@Consumes(MediaType.APPLICATION_JSON)
38+
public class OpenFlowResource {
39+
40+
@Inject
41+
FlowInstanceService flowInstanceService;
42+
43+
@Inject
44+
FlowExecutionService flowExecutionService;
45+
46+
// ==================== 流程实例查询 ====================
47+
48+
@GET
49+
@Path("/instances")
50+
public PageDTO<FlowInstanceResponse> findFlowInstanceList(
51+
@PathParam("projectId") String projectId,
52+
@QueryParam("flowInstanceId") String flowInstanceId,
53+
@QueryParam("flowModuleId") String flowModuleId,
54+
@QueryParam("flowDeployId") String flowDeployId,
55+
@QueryParam("status") Integer status,
56+
@QueryParam("caller") String caller,
57+
@QueryParam("page") @DefaultValue("1") Integer page,
58+
@QueryParam("size") @DefaultValue("20") Integer size) {
59+
FlowInstanceListRequest request = new FlowInstanceListRequest();
60+
request.setProjectId(projectId);
61+
request.setFlowInstanceId(flowInstanceId);
62+
request.setFlowModuleId(flowModuleId);
63+
request.setFlowDeployId(flowDeployId);
64+
request.setStatus(status);
65+
request.setCaller(caller);
66+
request.setPage(page);
67+
request.setSize(size);
68+
return flowInstanceService.findFlowInstanceList(request);
69+
}
70+
71+
@GET
72+
@Path("/instances/{flowInstanceId}")
73+
public FlowInstance getFlowInstance(
74+
@PathParam("projectId") String projectId,
75+
@PathParam("flowInstanceId") String flowInstanceId) {
76+
return flowInstanceService.findFlowInstance(projectId, flowInstanceId);
77+
}
78+
79+
@POST
80+
@Path("/instances/{flowInstanceId}/terminate")
81+
public TerminateResult terminateProcess(
82+
@PathParam("projectId") String projectId,
83+
@PathParam("flowInstanceId") String flowInstanceId,
84+
@QueryParam("effectiveForSubFlowInstance") @DefaultValue("true") boolean effectiveForSubFlowInstance) {
85+
return flowInstanceService.terminateProcess(projectId, flowInstanceId, effectiveForSubFlowInstance);
86+
}
87+
88+
// ==================== 流程执行 ====================
89+
90+
@POST
91+
@Path("/instances/start")
92+
public StartProcessResult startProcess(@PathParam("projectId") String projectId, StartProcessParam startProcessParam) {
93+
startProcessParam.setProjectId(projectId);
94+
return flowExecutionService.startProcess(startProcessParam);
95+
}
96+
97+
@POST
98+
@Path("/instances/{flowInstanceId}/commit")
99+
public CommitTaskResult commitTask(
100+
@PathParam("projectId") String projectId,
101+
@PathParam("flowInstanceId") String flowInstanceId,
102+
CommitTaskParam commitTaskParam) {
103+
commitTaskParam.setProjectId(projectId);
104+
commitTaskParam.setFlowInstanceId(flowInstanceId);
105+
return flowExecutionService.commitTask(commitTaskParam);
106+
}
107+
108+
@POST
109+
@Path("/instances/{flowInstanceId}/rollback")
110+
public RollbackTaskResult rollbackTask(
111+
@PathParam("projectId") String projectId,
112+
@PathParam("flowInstanceId") String flowInstanceId,
113+
RollbackTaskParam rollbackTaskParam) {
114+
rollbackTaskParam.setProjectId(projectId);
115+
rollbackTaskParam.setFlowInstanceId(flowInstanceId);
116+
return flowExecutionService.rollbackTask(rollbackTaskParam);
117+
}
118+
119+
@GET
120+
@Path("/instances/{flowInstanceId}/user-tasks")
121+
public List<NodeInstance> getHistoryUserTaskList(
122+
@PathParam("projectId") String projectId,
123+
@PathParam("flowInstanceId") String flowInstanceId,
124+
@QueryParam("effectiveForSubFlowInstance") @DefaultValue("true") boolean effectiveForSubFlowInstance) {
125+
return flowExecutionService.getHistoryUserTaskList(projectId, flowInstanceId, effectiveForSubFlowInstance);
126+
}
127+
128+
@GET
129+
@Path("/instances/{flowInstanceId}/elements")
130+
public List<ElementInstance> getHistoryElementList(
131+
@PathParam("projectId") String projectId,
132+
@PathParam("flowInstanceId") String flowInstanceId) {
133+
return flowExecutionService.getHistoryElementList(projectId, flowInstanceId);
134+
}
135+
}

‎flexmodel-ui‎

‎flexmodel-website‎

0 commit comments

Comments
 (0)