Skip to content

Commit 1ef7456

Browse files
committed
算子市场列表查询
1 parent f9b121b commit 1ef7456

File tree

6 files changed

+91
-20
lines changed

6 files changed

+91
-20
lines changed

backend/openapi/specs/operator-market.yaml

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ paths:
4747
labelName:
4848
type: string
4949
description: 标签名称
50+
isStar:
51+
type: boolean
52+
description: 是否收藏
5053
required:
5154
- page
5255
- size
@@ -478,15 +481,9 @@ components:
478481
description:
479482
type: string
480483
description: 算子描述
481-
language:
482-
type: string
483-
description: 开发语言
484484
version:
485485
type: string
486486
description: 算子版本
487-
modal:
488-
type: string
489-
description: 模态
490487
inputs:
491488
type: string
492489
description: 输入类型

backend/services/operator-market-service/src/main/java/com/dataengine/operator/domain/modal/Operator.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,8 @@ public class Operator {
1414

1515
private String description;
1616

17-
private String language;
18-
1917
private String version;
2018

21-
private String modal;
22-
2319
private String inputs;
2420

2521
private String outputs;

backend/services/operator-market-service/src/main/java/com/dataengine/operator/infrastructure/persistence/mapper/OperatorMapper.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22

33
import com.dataengine.operator.domain.modal.Operator;
44
import org.apache.ibatis.annotations.Mapper;
5+
import org.apache.ibatis.annotations.Param;
56

67
import java.util.List;
78

89
@Mapper
910
public interface OperatorMapper {
1011
List<Operator> findAllOperators();
12+
13+
List<Operator> findOperatorsByCriteria(@Param("size") Integer size, @Param("offset") Integer offset,
14+
@Param("operatorName") String operatorName,
15+
@Param("categories") List<Integer> categories,
16+
@Param("isStar") Boolean isStar);
1117
}

backend/services/operator-market-service/src/main/java/com/dataengine/operator/interfaces/api/OperatorController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.dataengine.operator.interfaces.dto.*;
77
import com.dataengine.operator.application.OperatorService;
88
import lombok.RequiredArgsConstructor;
9-
import org.springframework.beans.factory.annotation.Autowired;
109
import org.springframework.http.ResponseEntity;
1110
import org.springframework.web.bind.annotation.RestController;
1211
import org.springframework.web.multipart.MultipartFile;
@@ -22,8 +21,10 @@ public class OperatorController implements OperatorApi {
2221

2322
@Override
2423
public ResponseEntity<List<OperatorResponse>> operatorsListPost(OperatorsListPostRequest request) {
25-
List<Operator> allOperators = operatorMapper.findAllOperators();
26-
List<OperatorResponse> responses = allOperators.stream()
24+
Integer offset = (request.getPage() - 1) * request.getSize();
25+
List<Operator> filteredOperators = operatorMapper.findOperatorsByCriteria(request.getSize(), offset,
26+
request.getOperatorName(), request.getCategories(), request.getIsStar());
27+
List<OperatorResponse> responses = filteredOperators.stream()
2728
.map(OperatorConverter.INSTANCE::operatorToResponse).toList();
2829
return ResponseEntity.ok(responses);
2930
}
@@ -48,4 +49,3 @@ public ResponseEntity<OperatorResponse> operatorsUploadPost(MultipartFile file,
4849
return ResponseEntity.ok(operatorService.uploadOperator(file, description));
4950
}
5051
}
51-

backend/services/operator-market-service/src/main/resources/mappers/OperatorMapper.xml

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,37 @@
33

44
<mapper namespace="com.dataengine.operator.infrastructure.persistence.mapper.OperatorMapper">
55
<select id="findAllOperators" resultType="com.dataengine.operator.domain.modal.Operator">
6-
SELECT id, name, description, language, version, modal, inputs, outputs, runtime, settings, is_star, create_at, update_at FROM t_operator
6+
SELECT id, name, description, version, inputs, outputs, runtime, settings, is_star, created_at, updated_at FROM
7+
t_operator
8+
</select>
9+
10+
<select id="findOperatorsByCriteria" parameterType="map" resultType="com.dataengine.operator.domain.modal.Operator">
11+
SELECT operator_id as id, operator_name as name, description, version, inputs, outputs, runtime, settings,
12+
is_star, created_at, updated_at
13+
FROM
14+
(
15+
SELECT operator_id, operator_name, description, version, inputs, outputs, runtime, settings, is_star,
16+
created_at, updated_at, ROW_NUMBER() OVER (
17+
PARTITION BY operator_id -- 按 id 分组
18+
ORDER BY created_at DESC -- 按创建时间降序排列 (最新时间在前)
19+
) AS rn -- 为每组内的行分配序号
20+
FROM v_operator
21+
<where>
22+
<if test="operatorName != null and operatorName != ''">
23+
AND operator_name LIKE CONCAT('%', #{operatorName}, '%')
24+
</if>
25+
<if test="categories != null and !categories.isEmpty()">
26+
AND category_id IN
27+
<foreach collection="categories" item="category" open="(" separator="," close=")">
28+
#{category}
29+
</foreach>
30+
</if>
31+
<if test="isStar != null">
32+
AND is_star = #{isStar}
33+
</if>
34+
</where>
35+
) ranked_data
36+
WHERE rn = 1
37+
LIMIT ${size} OFFSET ${offset};
738
</select>
839
</mapper>

scripts/db/data-engine-operator-init.sql

Lines changed: 46 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,18 @@ USE dataengine;
22

33
CREATE TABLE IF NOT EXISTS t_operator
44
(
5-
id varchar(64),
5+
id varchar(64) primary key,
66
name varchar(64),
77
description varchar(256),
8-
language varchar(256),
98
version varchar(256),
10-
modal varchar(256),
119
inputs varchar(256),
1210
outputs varchar(256),
1311
runtime text,
1412
settings text,
1513
file_name text,
1614
is_star bool,
17-
create_at timestamp,
18-
update_at timestamp
15+
created_at timestamp default current_timestamp,
16+
updated_at timestamp default current_timestamp
1917
);
2018

2119
CREATE TABLE IF NOT EXISTS t_operator_category
@@ -33,3 +31,46 @@ CREATE TABLE IF NOT EXISTS t_operator_category_relation
3331
operator_id varchar(64)
3432
);
3533

34+
CREATE OR REPLACE VIEW v_operator AS
35+
SELECT
36+
o.id AS operator_id,
37+
o.name AS operator_name,
38+
description,
39+
version,
40+
inputs,
41+
outputs,
42+
runtime,
43+
settings,
44+
is_star,
45+
created_at,
46+
updated_at,
47+
toc.id AS category_id,
48+
toc.name AS category_name
49+
FROM t_operator_category_relation tocr
50+
LEFT JOIN t_operator o ON tocr.operator_id = o.id
51+
LEFT JOIN t_operator_category toc ON tocr.category_id = toc.id;
52+
53+
INSERT IGNORE INTO t_operator_category(id, name, type, parent_id) VALUES
54+
(1, 'modal', 'predefined', 0),
55+
(2, 'language', 'predefined', 0),
56+
(3, 'text', 'predefined', 1),
57+
(4, 'image', 'predefined', 1),
58+
(5, 'audio', 'predefined', 1),
59+
(6, 'video', 'predefined', 1),
60+
(7, 'multimodal', 'predefined', 1),
61+
(8, 'python', 'predefined', 2),
62+
(9, 'java', 'predefined', 2);
63+
64+
INSERT IGNORE INTO t_operator
65+
(id, name, description, version, inputs, outputs, runtime, settings, file_name, is_star) VALUES
66+
('TestOp1', 'TestOp1', '', '1.0.0', 'text', 'text', '', '', '', false),
67+
('TestOp2', 'TestOp2', '', '1.0.0', 'text', 'text', '', '', '', false),
68+
('TestOp3', 'TestOp3', '', '1.0.0', 'text', 'text', '', '', '', false);
69+
70+
INSERT IGNORE INTO t_operator_category_relation(category_id, operator_id) VALUES
71+
(3, 'TestOp1'),
72+
(3, 'TestOp2'),
73+
(3, 'TestOp3'),
74+
(8, 'TestOp1'),
75+
(8, 'TestOp2'),
76+
(9, 'TestOp3');

0 commit comments

Comments
 (0)