diff --git a/backend/src/main/java/io/metersphere/api/service/ApiTestDelService.java b/backend/src/main/java/io/metersphere/api/service/ApiTestDelService.java new file mode 100644 index 0000000000..ff31941ece --- /dev/null +++ b/backend/src/main/java/io/metersphere/api/service/ApiTestDelService.java @@ -0,0 +1,61 @@ +package io.metersphere.api.service; + +import io.metersphere.base.domain.*; +import io.metersphere.base.mapper.ApiDefinitionMapper; +import io.metersphere.base.mapper.ApiModuleMapper; +import io.metersphere.base.mapper.ApiScenarioMapper; +import io.metersphere.base.mapper.ApiScenarioModuleMapper; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@Transactional +/** + * 接口测试所有级联删除资源 + */ +public class ApiTestDelService { + @Resource + private ApiDefinitionService apiDefinitionService; + @Resource + private ApiAutomationService apiAutomationService; + @Resource + private ApiScenarioMapper apiScenarioMapper; + @Resource + private ApiDefinitionMapper apiDefinitionMapper; + @Resource + private ApiModuleMapper apiModuleMapper; + @Resource + private ApiScenarioModuleMapper apiScenarioModuleMapper; + + public void delete(String projectId) { + ApiDefinitionExample example = new ApiDefinitionExample(); + example.createCriteria().andProjectIdEqualTo(projectId); + // api and case + List apiIds = apiDefinitionMapper.selectByExample(example).stream().map(ApiDefinition::getId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(apiIds)) { + apiDefinitionService.deleteBatch(apiIds); + } + // scenario + ApiScenarioExample scenarioExample = new ApiScenarioExample(); + scenarioExample.createCriteria().andProjectIdEqualTo(projectId); + List scenarios = apiScenarioMapper.selectByExample(scenarioExample).stream().map(ApiScenario::getId).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(scenarios)) { + apiAutomationService.deleteBatch(scenarios); + } + // api module + ApiModuleExample moduleExample = new ApiModuleExample(); + moduleExample.createCriteria().andProjectIdEqualTo(projectId); + apiModuleMapper.deleteByExample(moduleExample); + + // scenario module + ApiScenarioModuleExample scenarioModuleExample = new ApiScenarioModuleExample(); + scenarioModuleExample.createCriteria().andProjectIdEqualTo(projectId); + apiScenarioModuleMapper.deleteByExample(scenarioModuleExample); + + } +} diff --git a/backend/src/main/java/io/metersphere/service/ProjectService.java b/backend/src/main/java/io/metersphere/service/ProjectService.java index 9741ef757d..459b343dc7 100644 --- a/backend/src/main/java/io/metersphere/service/ProjectService.java +++ b/backend/src/main/java/io/metersphere/service/ProjectService.java @@ -5,6 +5,7 @@ import io.metersphere.api.dto.DeleteAPITestRequest; import io.metersphere.api.dto.QueryAPITestRequest; import io.metersphere.api.service.APITestService; import io.metersphere.api.service.ApiAutomationService; +import io.metersphere.api.service.ApiTestDelService; import io.metersphere.api.service.ApiTestEnvironmentService; import io.metersphere.api.tcp.TCPPool; import io.metersphere.base.domain.*; @@ -89,7 +90,8 @@ public class ProjectService { private ExtUserMapper extUserMapper; @Resource private ScheduleService scheduleService; - + @Resource + private ApiTestDelService apiTestDelService; @Value("${tcp.mock.port}") private String tcpMockPorts; @@ -189,6 +191,7 @@ public class ProjectService { // 删除项目下 接口测试 相关 deleteAPIResourceByProjectId(projectId); + apiTestDelService.delete(projectId); // User Group deleteProjectUserGroup(projectId);