From 2c268243fcb80c539edf5ebc4d25ff58d4a0525e Mon Sep 17 00:00:00 2001 From: wildeslam Date: Thu, 27 Jun 2024 17:00:41 +0800 Subject: [PATCH 1/4] feat: save case merge interfaces --- .../controller/FileSystemController.java | 4 +- .../filesystem/FileSystemService.java | 92 ++++++++++++++++++- ...SAddItemsByAppAndInterfaceRequestType.java | 18 ++++ 3 files changed, 109 insertions(+), 5 deletions(-) diff --git a/arex-web-api/src/main/java/com/arextest/web/api/service/controller/FileSystemController.java b/arex-web-api/src/main/java/com/arextest/web/api/service/controller/FileSystemController.java index 9af732a0..e585f372 100644 --- a/arex-web-api/src/main/java/com/arextest/web/api/service/controller/FileSystemController.java +++ b/arex-web-api/src/main/java/com/arextest/web/api/service/controller/FileSystemController.java @@ -352,8 +352,10 @@ public Response validInvitation(@Valid @RequestBody ValidInvitationRequestType r @PostMapping("/addItemsByAppNameAndInterfaceName") @ResponseBody public Response addItemsByAppAndInterface( + @RequestHeader(name = Constants.ACCESS_TOKEN) String token, @Valid @RequestBody FSAddItemsByAppAndInterfaceRequestType request) { - List path = fileSystemService.addItemsByAppAndInterface(request); + String userName = jwtService.getUserName(token); + List path = fileSystemService.addItemsByAppAndInterface(request, userName); FSAddItemsByAppAndInterfaceResponseType response = new FSAddItemsByAppAndInterfaceResponseType(); if (CollectionUtils.isEmpty(path)) { response.setSuccess(false); diff --git a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java index 12ac6632..475b42f9 100644 --- a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java +++ b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java @@ -2,7 +2,6 @@ import com.arextest.common.exceptions.ArexException; import com.arextest.common.jwt.JWTService; -import com.arextest.config.model.dto.record.ServiceCollectConfiguration; import com.arextest.config.repository.ConfigRepositoryProvider; import com.arextest.web.common.LoadResource; import com.arextest.web.common.LogUtils; @@ -23,7 +22,6 @@ import com.arextest.web.core.repository.ReportPlanStatisticRepository; import com.arextest.web.core.repository.UserRepository; import com.arextest.web.core.repository.UserWorkspaceRepository; -import com.arextest.web.core.repository.mongo.ScheduleConfigurationRepositoryImpl; import com.arextest.web.model.contract.contracts.config.replay.ScheduleConfiguration; import com.arextest.web.model.contract.contracts.filesystem.BatchGetInterfaceCaseRequestType; import com.arextest.web.model.contract.contracts.filesystem.BatchGetInterfaceCaseResponseType; @@ -805,7 +803,8 @@ public FSQueryCaseResponseType queryDebuggingCase(String planId, String recordId return response; } - public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequestType request) { + public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequestType request, + String userName) { List path = new ArrayList<>(); if (CollectionUtils.isNotEmpty(request.getParentPath())) { path.addAll(request.getParentPath()); @@ -815,7 +814,8 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest LogUtils.error(LOGGER, "Workspace not found, workspaceId: {}", request.getWorkspaceId()); return null; } - String[] defaultPath = new String[2]; + String[] defaultPath = new String[3]; + // add folder FSNodeDto appIdNode = fileSystemUtils.findByNodeName(treeDto.getRoots(), request.getAppName()); if (appIdNode == null) { @@ -836,6 +836,7 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest } else { defaultPath[0] = appIdNode.getInfoId(); } + // add interface FSNodeDto interfaceNode = fileSystemUtils.findByNodeName(appIdNode.getChildren(), request.getInterfaceName()); if (interfaceNode == null) { @@ -851,13 +852,50 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest request.getInterfaceName()); return null; } + interfaceNode = fileSystemUtils.findByNodeName(addInterface.getRight().getRoots(), + request.getInterfaceName()); defaultPath[1] = addInterface.getLeft(); } else { defaultPath[1] = interfaceNode.getInfoId(); } + + // add case + FSNodeDto caseNode = fileSystemUtils.findByNodeName(interfaceNode.getChildren(), + request.getNodeName()); + if (caseNode == null) { + FSAddItemRequestType addCaseRequest = new FSAddItemRequestType(); + addCaseRequest.setId(treeDto.getId()); + addCaseRequest.setNodeName(request.getNodeName()); + addCaseRequest.setNodeType(FSInfoItem.CASE); + addCaseRequest.setParentPath(Arrays.asList(defaultPath)); + MutablePair addCase = addItem(addCaseRequest); + if (addCase == null) { + LogUtils.error(LOGGER, "Add case failed, workspaceId: {}, nodeName: {}", + request.getWorkspaceId(), + request.getNodeName()); + return null; + } + defaultPath[2] = addCase.getLeft(); + } else { + defaultPath[2] = caseNode.getInfoId(); + } path.addAll(Arrays.asList(defaultPath)); + + // save interface + FSSaveInterfaceRequestType saveInterfaceRequest = buildSaveInterfaceRequest(request, + defaultPath[1]); + saveInterface(saveInterfaceRequest, userName); + + //save case + FSSaveCaseRequestType saveCaseRequest = buildSaveCaseRequest(request, defaultPath[2]); + saveCase(saveCaseRequest, userName); + + //pin case + FSPinMockRequestType pinMockRequest = buildPinMockRequest(request, defaultPath[2]); + pinMock(pinMockRequest); } + // add the related information about the replay interface to the manual interface this.addReplayInfoToManual(request.getOperationId(), path); return path; @@ -1529,4 +1567,50 @@ public List getAbsolutePathInfo(String infoId, Integer nodeType) } return path; } + + private FSSaveInterfaceRequestType buildSaveInterfaceRequest( + FSAddItemsByAppAndInterfaceRequestType in, String id) { + FSSaveInterfaceRequestType out = new FSSaveInterfaceRequestType(); + out.setAddress(in.getAddress()); + out.setBody(in.getBody()); + out.setId(id); + out.setHeaders(in.getHeaders()); + out.setLabelIds(in.getLabelIds()); + out.setAuth(in.getAuth()); + out.setDescription(in.getDescription()); + out.setParams(in.getParams()); + out.setWorkspaceId(in.getWorkspaceId()); + out.setPreRequestScripts(in.getPreRequestScripts()); + out.setTestAddress(in.getTestAddress()); + out.setTestScripts(in.getTestScripts()); + return out; + } + + private FSSaveCaseRequestType buildSaveCaseRequest(FSAddItemsByAppAndInterfaceRequestType in, + String id) { + FSSaveCaseRequestType out = new FSSaveCaseRequestType(); + out.setId(id); + out.setAddress(in.getAddress()); + out.setBody(in.getBody()); + out.setHeaders(in.getHeaders()); + out.setLabelIds(in.getLabelIds()); + out.setAuth(in.getAuth()); + out.setDescription(in.getDescription()); + out.setParams(in.getParams()); + out.setWorkspaceId(in.getWorkspaceId()); + out.setPreRequestScripts(in.getPreRequestScripts()); + out.setTestAddress(in.getTestAddress()); + out.setTestScripts(in.getTestScripts()); + return out; + } + + private FSPinMockRequestType buildPinMockRequest(FSAddItemsByAppAndInterfaceRequestType in, + String id) { + FSPinMockRequestType out = new FSPinMockRequestType(); + out.setNodeType(FSInfoItem.CASE); + out.setRecordId(in.getNodeName()); + out.setWorkspaceId(in.getWorkspaceId()); + out.setInfoId(id); + return out; + } } diff --git a/arex-web-model-contract/src/main/java/com/arextest/web/model/contract/contracts/filesystem/FSAddItemsByAppAndInterfaceRequestType.java b/arex-web-model-contract/src/main/java/com/arextest/web/model/contract/contracts/filesystem/FSAddItemsByAppAndInterfaceRequestType.java index f641d2e6..794ca163 100644 --- a/arex-web-model-contract/src/main/java/com/arextest/web/model/contract/contracts/filesystem/FSAddItemsByAppAndInterfaceRequestType.java +++ b/arex-web-model-contract/src/main/java/com/arextest/web/model/contract/contracts/filesystem/FSAddItemsByAppAndInterfaceRequestType.java @@ -1,6 +1,10 @@ package com.arextest.web.model.contract.contracts.filesystem; +import com.arextest.web.model.contract.contracts.common.KeyValuePairType; +import com.arextest.web.model.contract.contracts.common.ScriptBlockType; import java.util.List; +import java.util.Map; +import java.util.Set; import javax.validation.constraints.NotBlank; import lombok.Data; @@ -17,4 +21,18 @@ public class FSAddItemsByAppAndInterfaceRequestType { private String interfaceName; @NotBlank(message = "operationId cannot be empty") private String operationId; + private String nodeName; + + // for Case & Interface + private AddressType address; + private List preRequestScripts; + private List testScripts; + private BodyType body; + private List headers; + private List params; + private AuthType auth; + private AddressType testAddress; + private Set labelIds; + private String description; + } From e6d56976823a78b9036372a6574389b8419aca8a Mon Sep 17 00:00:00 2001 From: wildeslam Date: Fri, 28 Jun 2024 11:42:38 +0800 Subject: [PATCH 2/4] feat: add mapper --- .../auto/SystemConfigAutoConfiguration.java | 13 ++++ .../filesystem/FileSystemService.java | 60 ++++--------------- .../web/model/mapper/FSRequestMapper.java | 28 +++++++++ 3 files changed, 51 insertions(+), 50 deletions(-) create mode 100644 arex-web-api/src/main/java/com/arextest/web/api/service/beans/auto/SystemConfigAutoConfiguration.java create mode 100644 arex-web-model/src/main/java/com/arextest/web/model/mapper/FSRequestMapper.java diff --git a/arex-web-api/src/main/java/com/arextest/web/api/service/beans/auto/SystemConfigAutoConfiguration.java b/arex-web-api/src/main/java/com/arextest/web/api/service/beans/auto/SystemConfigAutoConfiguration.java new file mode 100644 index 00000000..7a7ce125 --- /dev/null +++ b/arex-web-api/src/main/java/com/arextest/web/api/service/beans/auto/SystemConfigAutoConfiguration.java @@ -0,0 +1,13 @@ +package com.arextest.web.api.service.beans.auto; + +import org.springframework.context.annotation.Configuration; + +/** + * @author wildeslam. + * @create 2024/6/27 20:20 + */ +@Configuration +public class SystemConfigAutoConfiguration { + + +} diff --git a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java index 475b42f9..8e01c3e0 100644 --- a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java +++ b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java @@ -96,6 +96,7 @@ import com.arextest.web.model.mapper.FSFolderMapper; import com.arextest.web.model.mapper.FSInterfaceMapper; import com.arextest.web.model.mapper.FSNodeMapper; +import com.arextest.web.model.mapper.FSRequestMapper; import com.arextest.web.model.mapper.FSTreeMapper; import com.arextest.web.model.mapper.UserWorkspaceMapper; import com.arextest.web.model.mapper.WorkspaceMapper; @@ -882,16 +883,21 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest path.addAll(Arrays.asList(defaultPath)); // save interface - FSSaveInterfaceRequestType saveInterfaceRequest = buildSaveInterfaceRequest(request, - defaultPath[1]); + FSSaveInterfaceRequestType saveInterfaceRequest = FSRequestMapper.INSTANCE.buildSaveInterfaceRequest( + request); + saveInterfaceRequest.setId(defaultPath[1]); saveInterface(saveInterfaceRequest, userName); //save case - FSSaveCaseRequestType saveCaseRequest = buildSaveCaseRequest(request, defaultPath[2]); + FSSaveCaseRequestType saveCaseRequest = FSRequestMapper.INSTANCE.buildSaveCaseRequest( + request); + saveCaseRequest.setId(defaultPath[2]); saveCase(saveCaseRequest, userName); //pin case - FSPinMockRequestType pinMockRequest = buildPinMockRequest(request, defaultPath[2]); + FSPinMockRequestType pinMockRequest = FSRequestMapper.INSTANCE.buildPinMockRequest(request); + pinMockRequest.setInfoId(defaultPath[2]); + pinMockRequest.setNodeType(FSInfoItem.CASE); pinMock(pinMockRequest); } @@ -1567,50 +1573,4 @@ public List getAbsolutePathInfo(String infoId, Integer nodeType) } return path; } - - private FSSaveInterfaceRequestType buildSaveInterfaceRequest( - FSAddItemsByAppAndInterfaceRequestType in, String id) { - FSSaveInterfaceRequestType out = new FSSaveInterfaceRequestType(); - out.setAddress(in.getAddress()); - out.setBody(in.getBody()); - out.setId(id); - out.setHeaders(in.getHeaders()); - out.setLabelIds(in.getLabelIds()); - out.setAuth(in.getAuth()); - out.setDescription(in.getDescription()); - out.setParams(in.getParams()); - out.setWorkspaceId(in.getWorkspaceId()); - out.setPreRequestScripts(in.getPreRequestScripts()); - out.setTestAddress(in.getTestAddress()); - out.setTestScripts(in.getTestScripts()); - return out; - } - - private FSSaveCaseRequestType buildSaveCaseRequest(FSAddItemsByAppAndInterfaceRequestType in, - String id) { - FSSaveCaseRequestType out = new FSSaveCaseRequestType(); - out.setId(id); - out.setAddress(in.getAddress()); - out.setBody(in.getBody()); - out.setHeaders(in.getHeaders()); - out.setLabelIds(in.getLabelIds()); - out.setAuth(in.getAuth()); - out.setDescription(in.getDescription()); - out.setParams(in.getParams()); - out.setWorkspaceId(in.getWorkspaceId()); - out.setPreRequestScripts(in.getPreRequestScripts()); - out.setTestAddress(in.getTestAddress()); - out.setTestScripts(in.getTestScripts()); - return out; - } - - private FSPinMockRequestType buildPinMockRequest(FSAddItemsByAppAndInterfaceRequestType in, - String id) { - FSPinMockRequestType out = new FSPinMockRequestType(); - out.setNodeType(FSInfoItem.CASE); - out.setRecordId(in.getNodeName()); - out.setWorkspaceId(in.getWorkspaceId()); - out.setInfoId(id); - return out; - } } diff --git a/arex-web-model/src/main/java/com/arextest/web/model/mapper/FSRequestMapper.java b/arex-web-model/src/main/java/com/arextest/web/model/mapper/FSRequestMapper.java new file mode 100644 index 00000000..2e57c537 --- /dev/null +++ b/arex-web-model/src/main/java/com/arextest/web/model/mapper/FSRequestMapper.java @@ -0,0 +1,28 @@ +package com.arextest.web.model.mapper; + +import com.arextest.web.model.contract.contracts.filesystem.FSAddItemsByAppAndInterfaceRequestType; +import com.arextest.web.model.contract.contracts.filesystem.FSPinMockRequestType; +import com.arextest.web.model.contract.contracts.filesystem.FSSaveCaseRequestType; +import com.arextest.web.model.contract.contracts.filesystem.FSSaveInterfaceRequestType; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.factory.Mappers; + +/** + * @author wildeslam. + * @create 2024/6/28 11:36 + */ +@Mapper +public interface FSRequestMapper { + + FSRequestMapper INSTANCE = Mappers.getMapper(FSRequestMapper.class); + + FSSaveInterfaceRequestType buildSaveInterfaceRequest( + FSAddItemsByAppAndInterfaceRequestType request); + + FSSaveCaseRequestType buildSaveCaseRequest(FSAddItemsByAppAndInterfaceRequestType request); + + @Mapping(target = "recordId", source = "nodeName") + FSPinMockRequestType buildPinMockRequest(FSAddItemsByAppAndInterfaceRequestType request); + +} From eedfe761f5c7c00c61c34f9488b4d6c79ea476a3 Mon Sep 17 00:00:00 2001 From: wildeslam Date: Fri, 28 Jun 2024 14:59:24 +0800 Subject: [PATCH 3/4] feat: save case merge interfaces --- .../web/core/business/filesystem/FileSystemService.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java index 8e01c3e0..85d6fe38 100644 --- a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java +++ b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java @@ -853,8 +853,8 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest request.getInterfaceName()); return null; } - interfaceNode = fileSystemUtils.findByNodeName(addInterface.getRight().getRoots(), - request.getInterfaceName()); + interfaceNode = fileSystemUtils.deepFindByInfoId(addInterface.getRight().getRoots(), + addInterface.getLeft()); defaultPath[1] = addInterface.getLeft(); } else { defaultPath[1] = interfaceNode.getInfoId(); @@ -868,7 +868,7 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest addCaseRequest.setId(treeDto.getId()); addCaseRequest.setNodeName(request.getNodeName()); addCaseRequest.setNodeType(FSInfoItem.CASE); - addCaseRequest.setParentPath(Arrays.asList(defaultPath)); + addCaseRequest.setParentPath(Arrays.asList(defaultPath[0], defaultPath[1])); MutablePair addCase = addItem(addCaseRequest); if (addCase == null) { LogUtils.error(LOGGER, "Add case failed, workspaceId: {}, nodeName: {}", From 1159d748832ce4c97a2f363fd21b0a3ada12c151 Mon Sep 17 00:00:00 2001 From: wildeslam Date: Fri, 28 Jun 2024 15:50:09 +0800 Subject: [PATCH 4/4] feat: save case merge interfaces --- .../filesystem/FileSystemService.java | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java index 85d6fe38..6ad81f75 100644 --- a/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java +++ b/arex-web-core/src/main/java/com/arextest/web/core/business/filesystem/FileSystemService.java @@ -861,25 +861,20 @@ public List addItemsByAppAndInterface(FSAddItemsByAppAndInterfaceRequest } // add case - FSNodeDto caseNode = fileSystemUtils.findByNodeName(interfaceNode.getChildren(), - request.getNodeName()); - if (caseNode == null) { - FSAddItemRequestType addCaseRequest = new FSAddItemRequestType(); - addCaseRequest.setId(treeDto.getId()); - addCaseRequest.setNodeName(request.getNodeName()); - addCaseRequest.setNodeType(FSInfoItem.CASE); - addCaseRequest.setParentPath(Arrays.asList(defaultPath[0], defaultPath[1])); - MutablePair addCase = addItem(addCaseRequest); - if (addCase == null) { - LogUtils.error(LOGGER, "Add case failed, workspaceId: {}, nodeName: {}", - request.getWorkspaceId(), - request.getNodeName()); - return null; - } - defaultPath[2] = addCase.getLeft(); - } else { - defaultPath[2] = caseNode.getInfoId(); + FSAddItemRequestType addCaseRequest = new FSAddItemRequestType(); + addCaseRequest.setId(treeDto.getId()); + addCaseRequest.setNodeName(request.getNodeName()); + addCaseRequest.setNodeType(FSInfoItem.CASE); + addCaseRequest.setParentPath(Arrays.asList(defaultPath[0], defaultPath[1])); + MutablePair addCase = addItem(addCaseRequest); + if (addCase == null) { + LogUtils.error(LOGGER, "Add case failed, workspaceId: {}, nodeName: {}", + request.getWorkspaceId(), + request.getNodeName()); + return null; } + defaultPath[2] = addCase.getLeft(); + path.addAll(Arrays.asList(defaultPath)); // save interface