You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dolphinscheduler.apache.org by zi...@apache.org on 2022/09/15 01:37:27 UTC
[dolphinscheduler] branch dev updated: [Feature][Api] Refactor&Add api.controller.QueueV2Controller (#11389)
This is an automated email from the ASF dual-hosted git repository.
zihaoxiang pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new dec6197a67 [Feature][Api] Refactor&Add api.controller.QueueV2Controller (#11389)
dec6197a67 is described below
commit dec6197a6788cef027dd9f58a7a4958622534065
Author: xuhhui <sz...@163.com>
AuthorDate: Thu Sep 15 09:37:12 2022 +0800
[Feature][Api] Refactor&Add api.controller.QueueV2Controller (#11389)
* [Feature][Api] Refactor&Add api.controller.QueueV2Controller
* update review
---
.../api/controller/QueueV2Controller.java | 174 +++++++++++++++++++++
.../api/dto/queue/QueueCreateRequest.java | 36 +++++
.../api/dto/queue/QueueCreateResponse.java | 39 +++++
.../api/dto/queue/QueueListPagingResponse.java | 40 +++++
.../api/dto/queue/QueueListResponse.java | 43 +++++
.../api/dto/queue/QueueQueryRequest.java | 40 +++++
.../api/dto/queue/QueueUpdateRequest.java | 41 +++++
.../api/dto/queue/QueueUpdateResponse.java | 39 +++++
.../api/dto/queue/QueueVerifyRequest.java | 36 +++++
.../api/dto/queue/QueueVerifyResponse.java | 39 +++++
.../api/controller/QueueV2ControllerTest.java | 173 ++++++++++++++++++++
11 files changed, 700 insertions(+)
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/QueueV2Controller.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/QueueV2Controller.java
new file mode 100644
index 0000000000..a19aaed2c3
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/QueueV2Controller.java
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.controller;
+
+import static org.apache.dolphinscheduler.api.enums.Status.CREATE_QUEUE_ERROR;
+import static org.apache.dolphinscheduler.api.enums.Status.QUERY_QUEUE_LIST_ERROR;
+import static org.apache.dolphinscheduler.api.enums.Status.UPDATE_QUEUE_ERROR;
+import static org.apache.dolphinscheduler.api.enums.Status.VERIFY_QUEUE_ERROR;
+
+import org.apache.dolphinscheduler.api.aspect.AccessLogAnnotation;
+import org.apache.dolphinscheduler.api.dto.queue.QueueCreateRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueCreateResponse;
+import org.apache.dolphinscheduler.api.dto.queue.QueueListPagingResponse;
+import org.apache.dolphinscheduler.api.dto.queue.QueueListResponse;
+import org.apache.dolphinscheduler.api.dto.queue.QueueQueryRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueUpdateRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueUpdateResponse;
+import org.apache.dolphinscheduler.api.dto.queue.QueueVerifyRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueVerifyResponse;
+import org.apache.dolphinscheduler.api.exceptions.ApiException;
+import org.apache.dolphinscheduler.api.service.QueueService;
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.utils.ParameterUtils;
+import org.apache.dolphinscheduler.dao.entity.User;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestAttribute;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import org.springframework.web.bind.annotation.RestController;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * queue controller
+ */
+@Api(tags = "QUEUE_TAG")
+@RestController
+@RequestMapping("/v2/queues")
+public class QueueV2Controller extends BaseController {
+
+ @Autowired
+ private QueueService queueService;
+
+ /**
+ * query queue list
+ *
+ * @param loginUser login user
+ * @return queue list
+ */
+ @ApiOperation(value = "queryList", notes = "QUERY_QUEUE_LIST_NOTES")
+ @GetMapping(value = "/list")
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(QUERY_QUEUE_LIST_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public QueueListResponse queryList(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser) {
+ Result result = queueService.queryList(loginUser);
+ return new QueueListResponse(result);
+ }
+
+ /**
+ * query queue list paging
+ *
+ * @param loginUser login user
+ * @param queueQueryRequest queueQueryRequest
+ * @return queue list
+ */
+ @ApiOperation(value = "queryQueueListPaging", notes = "QUERY_QUEUE_LIST_PAGING_NOTES")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "searchVal", value = "SEARCH_VAL", dataTypeClass = String.class),
+ @ApiImplicitParam(name = "pageNo", value = "PAGE_NO", required = true, dataTypeClass = int.class, example = "1"),
+ @ApiImplicitParam(name = "pageSize", value = "PAGE_SIZE", required = true, dataTypeClass = int.class, example = "20")
+ })
+ @GetMapping()
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(QUERY_QUEUE_LIST_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public QueueListPagingResponse queryQueueListPaging(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ QueueQueryRequest queueQueryRequest) {
+ Result result = checkPageParams(queueQueryRequest.getPageNo(), queueQueryRequest.getPageSize());
+ if (!result.checkResult()) {
+ return new QueueListPagingResponse(result);
+ }
+
+ String searchVal = ParameterUtils.handleEscapes(queueQueryRequest.getSearchVal());
+ result = queueService.queryList(loginUser, searchVal, queueQueryRequest.getPageNo(), queueQueryRequest.getPageSize());
+ return new QueueListPagingResponse(result);
+ }
+
+ /**
+ * create queue
+ *
+ * @param loginUser login user
+ * @param queueCreateRequest queueCreateRequest
+ * @return create result
+ */
+ @ApiOperation(value = "createQueue", notes = "CREATE_QUEUE_NOTES")
+ @PostMapping(consumes = {"application/json"})
+ @ResponseStatus(HttpStatus.CREATED)
+ @ApiException(CREATE_QUEUE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public QueueCreateResponse createQueue(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ @RequestBody QueueCreateRequest queueCreateRequest) {
+ Result result = queueService.createQueue(loginUser, queueCreateRequest.getQueue(), queueCreateRequest.getQueueName());
+ return new QueueCreateResponse(result);
+ }
+
+ /**
+ * update queue
+ *
+ * @param loginUser login user
+ * @param id queue id
+ * @param queueUpdateRequest queueUpdateRequest
+ * @return update result code
+ */
+ @ApiOperation(value = "updateQueue", notes = "UPDATE_QUEUE_NOTES")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "id", value = "QUEUE_ID", required = true, dataTypeClass = int.class, example = "100")
+ })
+ @PutMapping(value = "/{id}", consumes = {"application/json"})
+ @ResponseStatus(HttpStatus.CREATED)
+ @ApiException(UPDATE_QUEUE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public QueueUpdateResponse updateQueue(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ @PathVariable(value = "id") int id, @RequestBody QueueUpdateRequest queueUpdateRequest) {
+ Result result = queueService.updateQueue(loginUser, id, queueUpdateRequest.getQueue(),
+ queueUpdateRequest.getQueueName());
+ return new QueueUpdateResponse(result);
+ }
+
+ /**
+ * verify queue and queue name
+ *
+ * @param loginUser login user
+ * @param queueVerifyRequest queueVerifyRequest
+ * @return true if the queue name not exists, otherwise return false
+ */
+ @ApiOperation(value = "verifyQueue", notes = "VERIFY_QUEUE_NOTES")
+ @PostMapping(value = "/verify", consumes = {"application/json"})
+ @ResponseStatus(HttpStatus.OK)
+ @ApiException(VERIFY_QUEUE_ERROR)
+ @AccessLogAnnotation(ignoreRequestArgs = "loginUser")
+ public QueueVerifyResponse verifyQueue(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser,
+ @RequestBody QueueVerifyRequest queueVerifyRequest) {
+ Result result = queueService.verifyQueue(queueVerifyRequest.getQueue(), queueVerifyRequest.getQueueName());
+ return new QueueVerifyResponse(result);
+ }
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueCreateRequest.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueCreateRequest.java
new file mode 100644
index 0000000000..702826fe32
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueCreateRequest.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * queue create request
+ */
+@ApiModel("QUEUE-CREATE")
+@Data
+public class QueueCreateRequest {
+
+ @ApiModelProperty(example = "queue11", required = true)
+ private String queue;
+
+ @ApiModelProperty(example = "test_queue11", required = true)
+ private String queueName;
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueCreateResponse.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueCreateResponse.java
new file mode 100644
index 0000000000..6d508f40d6
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueCreateResponse.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.dao.entity.Queue;
+
+import lombok.Data;
+
+/**
+ * queue create response
+ */
+@Data
+public class QueueCreateResponse extends Result {
+
+ private Queue data;
+
+ public QueueCreateResponse(Result result) {
+ super();
+ this.setCode(result.getCode());
+ this.setMsg(result.getMsg());
+ this.setData((Queue) result.getData());
+ }
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueListPagingResponse.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueListPagingResponse.java
new file mode 100644
index 0000000000..da4f542cbf
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueListPagingResponse.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import org.apache.dolphinscheduler.api.utils.PageInfo;
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.dao.entity.Queue;
+
+import lombok.Data;
+
+/**
+ * queue list paging response
+ */
+@Data
+public class QueueListPagingResponse extends Result {
+
+ private PageInfo<Queue> data;
+
+ public QueueListPagingResponse(Result result) {
+ super();
+ this.setCode(result.getCode());
+ this.setMsg(result.getMsg());
+ this.setData(result.getData());
+ }
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueListResponse.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueListResponse.java
new file mode 100644
index 0000000000..d0bfbb2abf
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueListResponse.java
@@ -0,0 +1,43 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+import org.apache.dolphinscheduler.dao.entity.Project;
+import org.apache.dolphinscheduler.dao.entity.Queue;
+
+import java.util.List;
+
+import lombok.Data;
+
+/**
+ * queue List response
+ */
+@Data
+public class QueueListResponse extends Result {
+
+ private List<Queue> data;
+
+ public QueueListResponse(Result result) {
+ super();
+ this.setCode(result.getCode());
+ this.setMsg(result.getMsg());
+ this.setData(JSONUtils.toList(JSONUtils.toJsonString(result.getData()), Project.class));
+ }
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueQueryRequest.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueQueryRequest.java
new file mode 100644
index 0000000000..727d8b12c6
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueQueryRequest.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import org.apache.dolphinscheduler.api.dto.PageQueryDto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * queue query request
+ */
+@ApiModel("QUEUE-QUERY")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
+public class QueueQueryRequest extends PageQueryDto {
+
+ @ApiModelProperty(example = "queue11")
+ private String searchVal;
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueUpdateRequest.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueUpdateRequest.java
new file mode 100644
index 0000000000..fd04318a03
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueUpdateRequest.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonInclude;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * queue update request
+ */
+@ApiModel("QUEUE-UPDATE")
+@JsonIgnoreProperties(ignoreUnknown = true)
+@JsonInclude(JsonInclude.Include.NON_NULL)
+@Data
+public class QueueUpdateRequest {
+
+ @ApiModelProperty(example = "queue11", required = true)
+ private String queue;
+
+ @ApiModelProperty(example = "test_queue11", required = true)
+ private String queueName;
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueUpdateResponse.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueUpdateResponse.java
new file mode 100644
index 0000000000..a0edf4b315
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueUpdateResponse.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.dao.entity.Queue;
+
+import lombok.Data;
+
+/**
+ * queue update response
+ */
+@Data
+public class QueueUpdateResponse extends Result {
+
+ private Queue data;
+
+ public QueueUpdateResponse(Result result) {
+ super();
+ this.setCode(result.getCode());
+ this.setMsg(result.getMsg());
+ this.setData((Queue) result.getData());
+ }
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueVerifyRequest.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueVerifyRequest.java
new file mode 100644
index 0000000000..88e5359843
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueVerifyRequest.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * queue verify request
+ */
+@ApiModel("QUEUE-Verify")
+@Data
+public class QueueVerifyRequest {
+
+ @ApiModelProperty(example = "queue11", required = true)
+ private String queue;
+
+ @ApiModelProperty(example = "queue11", required = true)
+ private String queueName;
+}
diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueVerifyResponse.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueVerifyResponse.java
new file mode 100644
index 0000000000..fea6c9079f
--- /dev/null
+++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/dto/queue/QueueVerifyResponse.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.dto.queue;
+
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.dao.entity.Queue;
+
+import lombok.Data;
+
+/**
+ * queue verify response
+ */
+@Data
+public class QueueVerifyResponse extends Result {
+
+ private Queue data;
+
+ public QueueVerifyResponse(Result result) {
+ super();
+ this.setCode(result.getCode());
+ this.setMsg(result.getMsg());
+ this.setData((Queue) result.getData());
+ }
+}
diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueV2ControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueV2ControllerTest.java
new file mode 100644
index 0000000000..e4235ad7f2
--- /dev/null
+++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/QueueV2ControllerTest.java
@@ -0,0 +1,173 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.dolphinscheduler.api.controller;
+
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.put;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.apache.dolphinscheduler.api.dto.queue.QueueCreateRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueQueryRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueUpdateRequest;
+import org.apache.dolphinscheduler.api.dto.queue.QueueVerifyRequest;
+import org.apache.dolphinscheduler.api.enums.Status;
+import org.apache.dolphinscheduler.api.utils.Result;
+import org.apache.dolphinscheduler.common.utils.JSONUtils;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MvcResult;
+
+/**
+ * queue v2 controller test
+ */
+public class QueueV2ControllerTest extends AbstractControllerTest {
+ private static final Logger logger = LoggerFactory.getLogger(QueueV2ControllerTest.class);
+
+ private static final String QUEUE_CREATE_NAME = "queue_create";
+ private static final String QUEUE_MODIFY_NAME = "queue_modify";
+ private static final String QUEUE_NAME_CREATE_NAME = "queue_name_create";
+ private static final String QUEUE_NAME_MODIFY_NAME = "queue_name_modify";
+ private static final String NOT_EXISTS_NAME = "not_exists";
+
+ @Test
+ public void testQueryList() throws Exception {
+ MvcResult mvcResult = mockMvc.perform(get("/v2/queues/list")
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
+ logger.info("query list queue return result:{}", mvcResult.getResponse().getContentAsString());
+ }
+
+ @Test
+ public void testQueryQueueListPagingEmpty() throws Exception {
+ QueueQueryRequest queueQueryRequest = new QueueQueryRequest();
+ queueQueryRequest.setSearchVal("");
+ queueQueryRequest.setPageNo(1);
+ queueQueryRequest.setPageSize(20);
+
+ MvcResult mvcResult = mockMvc.perform(get("/v2/queues")
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(JSONUtils.toJsonString(queueQueryRequest)))
+ .andExpect(status().isOk())
+ .andReturn();
+ Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+
+ Assert.assertNotNull(result);
+ logger.info("query list-paging queue return result:{}", mvcResult.getResponse().getContentAsString());
+ }
+
+ @Test
+ public void testCreateQueue() throws Exception {
+ QueueCreateRequest queueCreateRequest = new QueueCreateRequest();
+ queueCreateRequest.setQueue(QUEUE_CREATE_NAME);
+ queueCreateRequest.setQueueName(QUEUE_NAME_CREATE_NAME);
+ MvcResult mvcResult = mockMvc.perform(post("/v2/queues")
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(JSONUtils.toJsonString(queueCreateRequest)))
+ .andExpect(status().isCreated())
+ .andReturn();
+ Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
+ logger.info("create queue return result:{}", mvcResult.getResponse().getContentAsString());
+ }
+
+ @Test
+ public void testUpdateQueue() throws Exception {
+ QueueUpdateRequest queueUpdateRequest = new QueueUpdateRequest();
+ queueUpdateRequest.setQueue(QUEUE_MODIFY_NAME);
+ queueUpdateRequest.setQueueName(QUEUE_NAME_MODIFY_NAME);
+ MvcResult mvcResult = mockMvc.perform(put("/v2/queues/{id}", 1)
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(JSONUtils.toJsonString(queueUpdateRequest)))
+ .andExpect(status().isCreated())
+ .andReturn();
+ Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
+ logger.info("update queue return result:{}", mvcResult.getResponse().getContentAsString());
+ }
+
+ @Test
+ public void testVerifyQueue() throws Exception {
+ // queue value exist
+ QueueVerifyRequest queueVerifyRequest = new QueueVerifyRequest();
+ queueVerifyRequest.setQueue(QUEUE_MODIFY_NAME);
+ queueVerifyRequest.setQueueName(NOT_EXISTS_NAME);
+ MvcResult mvcResult = mockMvc.perform(post("/v2/queues/verify")
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(JSONUtils.toJsonString(queueVerifyRequest)))
+ .andExpect(status().isOk())
+ .andReturn();
+
+ Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.QUEUE_VALUE_EXIST.getCode(), result.getCode().intValue());
+
+ // queue name exist
+ queueVerifyRequest.setQueue(NOT_EXISTS_NAME);
+ queueVerifyRequest.setQueueName(QUEUE_NAME_CREATE_NAME);
+ mvcResult = mockMvc.perform(post("/v2/queues/verify")
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(JSONUtils.toJsonString(queueVerifyRequest)))
+ .andExpect(status().isOk())
+ .andReturn();
+ result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.QUEUE_NAME_EXIST.getCode(), result.getCode().intValue());
+
+ // success
+ queueVerifyRequest.setQueue(NOT_EXISTS_NAME);
+ queueVerifyRequest.setQueueName(NOT_EXISTS_NAME);
+ mvcResult = mockMvc.perform(post("/v2/queues/verify")
+ .header(SESSION_ID, sessionId)
+ .accept(MediaType.ALL)
+ .contentType(MediaType.APPLICATION_JSON)
+ .content(JSONUtils.toJsonString(queueVerifyRequest)))
+ .andExpect(status().isOk())
+ .andReturn();
+ result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class);
+ Assert.assertNotNull(result);
+ Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue());
+ logger.info(mvcResult.getResponse().getContentAsString());
+ logger.info("verify queue return result:{}", mvcResult.getResponse().getContentAsString());
+ }
+}