fix(接口测试): 接口分享左侧树查询问题
This commit is contained in:
parent
a60b7b2f01
commit
36019548ca
|
@ -5,12 +5,8 @@ import com.github.pagehelper.PageHelper;
|
||||||
import io.metersphere.api.domain.ApiDocShare;
|
import io.metersphere.api.domain.ApiDocShare;
|
||||||
import io.metersphere.api.dto.definition.ApiDocShareDTO;
|
import io.metersphere.api.dto.definition.ApiDocShareDTO;
|
||||||
import io.metersphere.api.dto.definition.ApiDocShareDetail;
|
import io.metersphere.api.dto.definition.ApiDocShareDetail;
|
||||||
import io.metersphere.api.dto.definition.ApiModuleRequest;
|
import io.metersphere.api.dto.definition.request.*;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareCheckRequest;
|
import io.metersphere.api.service.definition.ApiDefinitionExportService;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareEditRequest;
|
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareModuleRequest;
|
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocSharePageRequest;
|
|
||||||
import io.metersphere.api.service.definition.ApiDefinitionModuleService;
|
|
||||||
import io.metersphere.api.service.definition.ApiDocShareLogService;
|
import io.metersphere.api.service.definition.ApiDocShareLogService;
|
||||||
import io.metersphere.api.service.definition.ApiDocShareService;
|
import io.metersphere.api.service.definition.ApiDocShareService;
|
||||||
import io.metersphere.sdk.constants.PermissionConstants;
|
import io.metersphere.sdk.constants.PermissionConstants;
|
||||||
|
@ -47,7 +43,7 @@ public class ApiDocShareController {
|
||||||
@Resource
|
@Resource
|
||||||
private ApiDocShareService apiDocShareService;
|
private ApiDocShareService apiDocShareService;
|
||||||
@Resource
|
@Resource
|
||||||
private ApiDefinitionModuleService apiDefinitionModuleService;
|
private ApiDefinitionExportService apiDefinitionExportService;
|
||||||
|
|
||||||
@PostMapping(value = "/page")
|
@PostMapping(value = "/page")
|
||||||
@Operation(summary = "接口测试-接口管理-接口定义-分页获取分享列表")
|
@Operation(summary = "接口测试-接口管理-接口定义-分页获取分享列表")
|
||||||
|
@ -94,21 +90,34 @@ public class ApiDocShareController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/detail/{id}")
|
@GetMapping("/detail/{id}")
|
||||||
@Operation(summary = "接口测试-接口管理-接口定义-查看链接")
|
@Operation(summary = "接口测试-接口管理-接口定义-分享-查看链接")
|
||||||
@Parameter(name = "id", description = "分享ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED))
|
@Parameter(name = "id", description = "分享ID", schema = @Schema(requiredMode = Schema.RequiredMode.REQUIRED))
|
||||||
public ApiDocShareDetail detail(@PathVariable String id) {
|
public ApiDocShareDetail detail(@PathVariable String id) {
|
||||||
return apiDocShareService.detail(id);
|
return apiDocShareService.detail(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/module/tree")
|
@PostMapping("/module/tree")
|
||||||
@Operation(summary = "接口测试-接口管理-接口定义-模块树")
|
@Operation(summary = "接口测试-接口管理-接口定义-分享-模块树")
|
||||||
public List<BaseTreeNode> getShareDocTree(@Validated @RequestBody ApiModuleRequest request) {
|
public List<BaseTreeNode> getShareDocTree(@Validated @RequestBody ApiDocShareModuleRequest request) {
|
||||||
return apiDefinitionModuleService.getTree(request, false, true);
|
return apiDocShareService.getShareTree(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/module/count")
|
@PostMapping("/module/count")
|
||||||
@Operation(summary = "接口测试-接口管理-接口定义-模块树数量")
|
@Operation(summary = "接口测试-接口管理-接口定义-分享-模块树数量")
|
||||||
public Map<String, Long> getShareDocTreeCount(@Validated @RequestBody ApiDocShareModuleRequest request) {
|
public Map<String, Long> getShareDocTreeCount(@Validated @RequestBody ApiDocShareModuleRequest request) {
|
||||||
return apiDocShareService.getShareTreeCount(request);
|
return apiDocShareService.getShareTreeCount(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/export/{type}")
|
||||||
|
@Operation(summary = "接口测试-接口管理-接口定义-分享-导出")
|
||||||
|
public String export(@RequestBody ApiDocShareExportRequest request, @PathVariable String type) {
|
||||||
|
return apiDocShareService.export(request, type, SessionUtils.getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/stop/{taskId}")
|
||||||
|
@Operation(summary = "接口测试-接口管理-导出-停止导出")
|
||||||
|
public void caseStopExport(@PathVariable String taskId) {
|
||||||
|
apiDefinitionExportService.stopExport(taskId, SessionUtils.getUserId());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package io.metersphere.api.dto.definition.request;
|
||||||
|
|
||||||
|
import io.metersphere.api.dto.definition.ApiDefinitionBatchExportRequest;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author song-cc-rock
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = false)
|
||||||
|
public class ApiDocShareExportRequest extends ApiDefinitionBatchExportRequest {
|
||||||
|
|
||||||
|
@Schema(description = "分享ID", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||||
|
private String shareId;
|
||||||
|
}
|
|
@ -102,5 +102,5 @@ public interface ExtApiDefinitionMapper {
|
||||||
|
|
||||||
List<ApiDefinition> getListBySelectIds(@Param("projectId") String projectId, @Param("ids") List<String> ids, @Param("protocols") List<String> protocols);
|
List<ApiDefinition> getListBySelectIds(@Param("projectId") String projectId, @Param("ids") List<String> ids, @Param("protocols") List<String> protocols);
|
||||||
|
|
||||||
Long countByShareParam(@Param("projectId") String projectId, @Param("condition") String condition);
|
List<String> getIdsByShareParam(@Param("projectId") String projectId, @Param("condition") String condition);
|
||||||
}
|
}
|
||||||
|
|
|
@ -752,8 +752,8 @@
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="countByShareParam" resultType="java.lang.Long">
|
<select id="getIdsByShareParam" resultType="java.lang.String">
|
||||||
select count(*) from api_definition where project_id = #{projectId} and deleted = 0
|
select id from api_definition where project_id = #{projectId} and deleted = 0
|
||||||
<if test="condition != null and condition != ''">
|
<if test="condition != null and condition != ''">
|
||||||
and ${condition}
|
and ${condition}
|
||||||
</if>
|
</if>
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<mapper namespace="io.metersphere.api.mapper.ExtApiDocShareMapper">
|
<mapper namespace="io.metersphere.api.mapper.ExtApiDocShareMapper">
|
||||||
|
|
||||||
<select id="list" resultType="io.metersphere.api.dto.definition.ApiDocShareDTO">
|
<select id="list" resultType="io.metersphere.api.dto.definition.ApiDocShareDTO">
|
||||||
select id, name, is_private isPrivate, create_user createUser, create_time createTime,
|
select id, name, is_private isPrivate, create_user createUser, create_time createTime, allow_export allowExport,
|
||||||
api_range apiRange, range_match_symbol rangeMatchSymbol, range_match_val rangeMatchVal,
|
api_range apiRange, range_match_symbol rangeMatchSymbol, range_match_val rangeMatchVal,
|
||||||
invalid_time invalidTime, invalid_unit invalidUnit, project_id projectId, password
|
invalid_time invalidTime, invalid_unit invalidUnit, project_id projectId, password
|
||||||
from api_doc_share
|
from api_doc_share
|
||||||
|
|
|
@ -3,10 +3,7 @@ package io.metersphere.api.service.definition;
|
||||||
import io.metersphere.api.domain.ApiDocShare;
|
import io.metersphere.api.domain.ApiDocShare;
|
||||||
import io.metersphere.api.dto.definition.ApiDocShareDTO;
|
import io.metersphere.api.dto.definition.ApiDocShareDTO;
|
||||||
import io.metersphere.api.dto.definition.ApiDocShareDetail;
|
import io.metersphere.api.dto.definition.ApiDocShareDetail;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareCheckRequest;
|
import io.metersphere.api.dto.definition.request.*;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareEditRequest;
|
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareModuleRequest;
|
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocSharePageRequest;
|
|
||||||
import io.metersphere.api.mapper.ApiDocShareMapper;
|
import io.metersphere.api.mapper.ApiDocShareMapper;
|
||||||
import io.metersphere.api.mapper.ExtApiDefinitionMapper;
|
import io.metersphere.api.mapper.ExtApiDefinitionMapper;
|
||||||
import io.metersphere.api.mapper.ExtApiDocShareMapper;
|
import io.metersphere.api.mapper.ExtApiDocShareMapper;
|
||||||
|
@ -16,8 +13,10 @@ import io.metersphere.sdk.dto.CombineSearch;
|
||||||
import io.metersphere.sdk.exception.MSException;
|
import io.metersphere.sdk.exception.MSException;
|
||||||
import io.metersphere.sdk.util.BeanUtils;
|
import io.metersphere.sdk.util.BeanUtils;
|
||||||
import io.metersphere.sdk.util.Translator;
|
import io.metersphere.sdk.util.Translator;
|
||||||
|
import io.metersphere.system.dto.sdk.BaseTreeNode;
|
||||||
import io.metersphere.system.uid.IDGenerator;
|
import io.metersphere.system.uid.IDGenerator;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
@ -42,6 +41,8 @@ public class ApiDocShareService {
|
||||||
private ExtApiDocShareMapper extApiDocShareMapper;
|
private ExtApiDocShareMapper extApiDocShareMapper;
|
||||||
@Resource
|
@Resource
|
||||||
private ApiDefinitionModuleService apiDefinitionModuleService;
|
private ApiDefinitionModuleService apiDefinitionModuleService;
|
||||||
|
@Resource
|
||||||
|
private ApiDefinitionExportService apiDefinitionExportService;
|
||||||
|
|
||||||
public static final String RANGE_ALL = "ALL";
|
public static final String RANGE_ALL = "ALL";
|
||||||
|
|
||||||
|
@ -123,6 +124,16 @@ public class ApiDocShareService {
|
||||||
return detail;
|
return detail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询分享左侧模块树
|
||||||
|
* @param request 请求参数
|
||||||
|
* @return 模块树节点数量
|
||||||
|
*/
|
||||||
|
public List<BaseTreeNode> getShareTree(ApiDocShareModuleRequest request) {
|
||||||
|
ApiDocShare docShare = checkExit(request.getShareId());
|
||||||
|
return apiDefinitionModuleService.getTree(buildModuleParam(request, docShare), false, true);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 查询分享左侧模块树节点数量
|
* 查询分享左侧模块树节点数量
|
||||||
* @param request 请求参数
|
* @param request 请求参数
|
||||||
|
@ -133,6 +144,23 @@ public class ApiDocShareService {
|
||||||
return apiDefinitionModuleService.moduleCount(buildModuleParam(request, docShare), false);
|
return apiDefinitionModuleService.moduleCount(buildModuleParam(request, docShare), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出接口定义
|
||||||
|
* @param request 请求参数
|
||||||
|
* @param type 类型
|
||||||
|
* @param currentUser 当前用户
|
||||||
|
* @return 接口定义导出返回
|
||||||
|
*/
|
||||||
|
public String export(ApiDocShareExportRequest request, String type, String currentUser) {
|
||||||
|
if (request.isSelectAll()) {
|
||||||
|
ApiDocShare docShare = checkExit(request.getShareId());
|
||||||
|
List<String> shareIds = getShareIdsByParam(docShare);
|
||||||
|
request.setSelectAll(false);
|
||||||
|
request.setSelectIds(shareIds);
|
||||||
|
}
|
||||||
|
return apiDefinitionExportService.exportApiDefinition(request, type, currentUser);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构建分享额外信息
|
* 构建分享额外信息
|
||||||
* @param docShares 分享列表
|
* @param docShares 分享列表
|
||||||
|
@ -153,6 +181,16 @@ public class ApiDocShareService {
|
||||||
* @return 数量
|
* @return 数量
|
||||||
*/
|
*/
|
||||||
public Integer countApiShare(ApiDocShareDTO docShare) {
|
public Integer countApiShare(ApiDocShareDTO docShare) {
|
||||||
|
List<String> shareIds = getShareIdsByParam(docShare);
|
||||||
|
return CollectionUtils.isEmpty(shareIds) ? 0 : shareIds.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据分享信息获取分享的定义ID集合
|
||||||
|
* @param docShare 分享信息
|
||||||
|
* @return 分享的定义ID集合
|
||||||
|
*/
|
||||||
|
public List<String> getShareIdsByParam(ApiDocShare docShare) {
|
||||||
StringBuilder condition = new StringBuilder();
|
StringBuilder condition = new StringBuilder();
|
||||||
if (!StringUtils.equals(docShare.getApiRange(), RANGE_ALL) && !StringUtils.isBlank(docShare.getRangeMatchVal())) {
|
if (!StringUtils.equals(docShare.getApiRange(), RANGE_ALL) && !StringUtils.isBlank(docShare.getRangeMatchVal())) {
|
||||||
switch (docShare.getApiRange()) {
|
switch (docShare.getApiRange()) {
|
||||||
|
@ -183,7 +221,7 @@ public class ApiDocShareService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return extApiDefinitionMapper.countByShareParam(docShare.getProjectId(), condition.toString()).intValue();
|
return extApiDefinitionMapper.getIdsByShareParam(docShare.getProjectId(), condition.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
package io.metersphere.api.controller;
|
package io.metersphere.api.controller;
|
||||||
|
|
||||||
import io.metersphere.api.domain.ApiDocShare;
|
import io.metersphere.api.domain.ApiDocShare;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareCheckRequest;
|
import io.metersphere.api.dto.definition.request.*;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareEditRequest;
|
import io.metersphere.sdk.util.BeanUtils;
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocShareModuleRequest;
|
|
||||||
import io.metersphere.api.dto.definition.request.ApiDocSharePageRequest;
|
|
||||||
import io.metersphere.sdk.util.JSON;
|
import io.metersphere.sdk.util.JSON;
|
||||||
import io.metersphere.system.base.BaseTest;
|
import io.metersphere.system.base.BaseTest;
|
||||||
import io.metersphere.system.controller.handler.ResultHolder;
|
import io.metersphere.system.controller.handler.ResultHolder;
|
||||||
|
@ -36,6 +34,7 @@ public class ApiDocShareControllerTests extends BaseTest {
|
||||||
private final static String DETAIL = BASE_PATH + "detail/";
|
private final static String DETAIL = BASE_PATH + "detail/";
|
||||||
private final static String MODULE_TREE = BASE_PATH + "module/tree";
|
private final static String MODULE_TREE = BASE_PATH + "module/tree";
|
||||||
private final static String MODULE_COUNT = BASE_PATH + "module/count";
|
private final static String MODULE_COUNT = BASE_PATH + "module/count";
|
||||||
|
private final static String EXPORT = BASE_PATH + "export/Swagger";
|
||||||
|
|
||||||
@Order(1)
|
@Order(1)
|
||||||
@Test
|
@Test
|
||||||
|
@ -73,6 +72,13 @@ public class ApiDocShareControllerTests extends BaseTest {
|
||||||
this.requestPostWithOk(CHECK, checkRequest);
|
this.requestPostWithOk(CHECK, checkRequest);
|
||||||
this.requestGetWithOk(DETAIL + docShare.getId());
|
this.requestGetWithOk(DETAIL + docShare.getId());
|
||||||
this.requestPostWithOk(MODULE_TREE, moduleRequest);
|
this.requestPostWithOk(MODULE_TREE, moduleRequest);
|
||||||
|
ApiDocShareExportRequest exportRequest = new ApiDocShareExportRequest();
|
||||||
|
BeanUtils.copyBean(exportRequest, moduleRequest);
|
||||||
|
exportRequest.setSelectAll(true);
|
||||||
|
this.requestPostWithOk(EXPORT, exportRequest);
|
||||||
|
exportRequest.setSelectAll(false);
|
||||||
|
exportRequest.setSelectIds(List.of("export-id"));
|
||||||
|
this.requestPost(EXPORT, exportRequest);
|
||||||
this.requestGetWithOk(DELETE + docShare.getId());
|
this.requestGetWithOk(DELETE + docShare.getId());
|
||||||
// 不存在的ID
|
// 不存在的ID
|
||||||
this.requestGet(DELETE + "not-exist-id").andExpect(status().is5xxServerError());
|
this.requestGet(DELETE + "not-exist-id").andExpect(status().is5xxServerError());
|
||||||
|
|
Loading…
Reference in New Issue