Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: query compareConfig with operationName #429

Merged
merged 2 commits into from
Jun 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.arextest.common.utils.ResponseUtils;
import com.arextest.web.core.business.config.replay.ComparisonSummaryService;
import com.arextest.web.model.contract.contracts.config.replay.ComparisonSummaryConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.QueryCompareConfigRequestType;
import com.arextest.web.model.contract.contracts.config.replay.QueryConfigOfCategoryRequestType;
import com.arextest.web.model.contract.contracts.config.replay.ReplayCompareConfig;
import javax.annotation.Resource;
Expand Down Expand Up @@ -55,4 +56,12 @@ public Response queryConfigOfCategory(@RequestBody QueryConfigOfCategoryRequestT
);
}

@PostMapping("/queryCompareConfig")
@ResponseBody
public Response queryCompareConfig(@RequestBody QueryCompareConfigRequestType request) {
ReplayCompareConfig replayCompareConfig = comparisonSummaryService.getReplayComparisonConfig(
request.getAppId(), request.getOperationName());
return ResponseUtils.successResponse(replayCompareConfig);
}

}
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
package com.arextest.web.core.business.config.application;

import com.arextest.config.model.dao.config.ServiceOperationCollection;
import com.arextest.config.model.dto.application.ApplicationOperationConfiguration;
import com.arextest.config.model.dto.application.Dependency;
import com.arextest.config.repository.ConfigRepositoryProvider;
import com.arextest.config.repository.impl.ApplicationOperationConfigurationRepositoryImpl;
import com.arextest.web.core.business.config.AbstractConfigurableHandler;
import com.arextest.web.core.repository.AppContractRepository;
import com.arextest.web.model.dao.mongodb.AppContractCollection;
import com.arextest.web.model.dao.mongodb.AppContractCollection.Fields;
import com.arextest.web.model.dto.AppContractDto;
import com.arextest.web.model.enums.ContractTypeEnum;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import software.amazon.awssdk.services.sso.endpoints.internal.Value.Str;

/**
* @author jmo
Expand Down Expand Up @@ -68,4 +75,21 @@ public ApplicationOperationConfiguration useResultByOperationId(String operation
result.setDependencyList(dependencyList);
return result;
}

public List<ApplicationOperationConfiguration> queryOperationByName(String appId,
String operationName) {
Map<String, Object> queryConditions = new HashMap<>(2);
queryConditions.put(ServiceOperationCollection.Fields.appId, appId);
if (operationName != null) {
queryConditions.put(ServiceOperationCollection.Fields.operationName, operationName);
}
List<ApplicationOperationConfiguration> applicationOperationConfigurations =
applicationOperationConfigurationRepository.queryByMultiCondition(queryConditions);
if (CollectionUtils.isEmpty(applicationOperationConfigurations)) {
return Collections.emptyList();
}
return applicationOperationConfigurations;
}


}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import com.arextest.web.common.LogUtils;
import com.arextest.web.core.business.ConfigLoadService;
import com.arextest.web.core.business.config.ConfigurableHandler;
import com.arextest.web.core.business.config.application.ApplicationOperationConfigurableHandler;
import com.arextest.web.core.repository.AppContractRepository;
import com.arextest.web.model.contract.contracts.common.enums.ExpirationType;
import com.arextest.web.model.contract.contracts.compare.CategoryDetail;
Expand Down Expand Up @@ -69,6 +70,9 @@ public class ComparisonSummaryService {
@Resource
ApplicationOperationConfigurationRepositoryImpl applicationOperationConfigurationRepositoryImpl;

@Resource
ApplicationOperationConfigurableHandler applicationOperationConfigurableHandler;

@Resource
ConfigLoadService configLoadService;

Expand Down Expand Up @@ -106,39 +110,7 @@ public ComparisonSummaryConfiguration getComparisonDetailsSummary(String interfa
}

public ReplayCompareConfig getReplayComparisonConfig(String appId) {
ReplayCompareConfig result = new ReplayCompareConfig();
// store all config items, key is operationId and null, the null for global config
Map<String, ReplayCompareConfig.ReplayComparisonItem> replayComparisonItemMap;

// build operation config and global config
AppOperationAndDependencyInfo appOperationAndDependencyInfo = this.getOperationInfos(appId);
Map<String, ApplicationOperationConfiguration> operationInfoMap =
appOperationAndDependencyInfo.getOperationMap();
Map<String, Map<String, AppContractDto>> appContractDtoMap =
appOperationAndDependencyInfo.getAppContractDtoMap();
replayComparisonItemMap = this.buildMultiConfiguration(appId, operationInfoMap,
appContractDtoMap);

// merge global config to all operation config
this.mergeGlobalComparisonConfig(replayComparisonItemMap, operationInfoMap, appContractDtoMap);

// build global config
ReplayCompareConfig.GlobalComparisonItem globalComparisonItem = new ReplayCompareConfig.GlobalComparisonItem();
ReplayCompareConfig.ReplayComparisonItem replayComparisonItem = replayComparisonItemMap.get(
null);
if (replayComparisonItem != null) {
BeanUtils.copyProperties(replayComparisonItem, globalComparisonItem);
result.setGlobalComparisonItem(globalComparisonItem);
}

ReplayComparisonItem globalReplayComparison = replayComparisonItemMap.get(null);
List<ReplayComparisonItem> operationReplayComparison = replayComparisonItemMap.entrySet()
.stream()
.filter(item -> Objects.nonNull(item.getKey())).map(Entry::getValue)
.collect(Collectors.toList());
result.setReplayComparisonItems(operationReplayComparison);
this.setDefaultWhenMissingDependency(globalReplayComparison, result);
return result;
return getReplayComparisonConfig(appId, null);
}

public QueryConfigOfCategoryResponseType queryConfigOfCategory(
Expand Down Expand Up @@ -189,7 +161,45 @@ public QueryConfigOfCategoryResponseType queryConfigOfCategory(
return responseType;
}

public ReplayCompareConfig getReplayComparisonConfig(String appId, String operationName) {
ReplayCompareConfig result = new ReplayCompareConfig();
// store all config items, key is operationId and null, the null for global config
Map<String, ReplayCompareConfig.ReplayComparisonItem> replayComparisonItemMap;

// build operation config and global config
AppOperationAndDependencyInfo appOperationAndDependencyInfo = this.getOperationInfos(appId,
operationName);

Map<String, ApplicationOperationConfiguration> operationInfoMap =
appOperationAndDependencyInfo.getOperationMap();
Map<String, Map<String, AppContractDto>> appContractDtoMap =
appOperationAndDependencyInfo.getAppContractDtoMap();
replayComparisonItemMap = this.buildMultiConfiguration(appId, operationInfoMap,
appContractDtoMap);

// merge global config to all operation config
this.mergeGlobalComparisonConfig(replayComparisonItemMap, operationInfoMap, appContractDtoMap);

// build global config
ReplayCompareConfig.GlobalComparisonItem globalComparisonItem = new ReplayCompareConfig.GlobalComparisonItem();
ReplayCompareConfig.ReplayComparisonItem replayComparisonItem = replayComparisonItemMap.get(
null);
if (replayComparisonItem != null) {
BeanUtils.copyProperties(replayComparisonItem, globalComparisonItem);
result.setGlobalComparisonItem(globalComparisonItem);
}

ReplayComparisonItem globalReplayComparison = replayComparisonItemMap.get(null);
List<ReplayComparisonItem> operationReplayComparison = replayComparisonItemMap.entrySet()
.stream()
.filter(item -> Objects.nonNull(item.getKey())).map(Entry::getValue)
.collect(Collectors.toList());
result.setReplayComparisonItems(operationReplayComparison);
this.setDefaultWhenMissingDependency(globalReplayComparison, result);
return result;
}

// region query compareconfig of interface
protected void getComparisonExclusionsConfiguration(String interfaceId,
ComparisonSummaryConfiguration comparisonSummaryConfiguration) {
Set<List<String>> exclusionSet = new HashSet<>();
Expand Down Expand Up @@ -245,6 +255,7 @@ protected void getComparisonReferenceConfiguration(String interfaceId,
protected void getAdditionalComparisonConfiguration(String interfaceId,
ComparisonSummaryConfiguration comparisonSummaryConfiguration) {
}
// endregion

protected Map<String, ReplayCompareConfig.ReplayComparisonItem> buildMultiConfiguration(
String appId,
Expand Down Expand Up @@ -339,6 +350,7 @@ protected Map<String, ReplayCompareConfig.ReplayComparisonItem> buildMultiConfig
* @param appId appId
* @return Map<String, ApplicationOperationConfiguration>
*/
@Deprecated
protected AppOperationAndDependencyInfo getOperationInfos(String appId) {
AppOperationAndDependencyInfo appOperationAndDependencyInfo = new AppOperationAndDependencyInfo();

Expand Down Expand Up @@ -372,6 +384,31 @@ protected AppOperationAndDependencyInfo getOperationInfos(String appId) {
return appOperationAndDependencyInfo;
}

protected AppOperationAndDependencyInfo getOperationInfos(String appId, String operationName) {
AppOperationAndDependencyInfo appOperationAndDependencyInfo = new AppOperationAndDependencyInfo();

List<ApplicationOperationConfiguration> applicationOperationConfigurations =
applicationOperationConfigurableHandler.queryOperationByName(appId, operationName);
Map<String, ApplicationOperationConfiguration> operationMap = applicationOperationConfigurations.stream()
.collect(Collectors.toMap(ApplicationOperationConfiguration::getId, Function.identity()));

List<String> operationIdList = new ArrayList<>(operationMap.keySet());
// appContractDtoList filter the operation and group by operationId
List<AppContractDto> appContractDtos = appContractRepository.queryAppContractListByOpIds(
operationIdList,
Collections.singletonList(AppContractCollection.Fields.contract));
Map<String,
Map<String, AppContractDto>> appContractDtoMap = appContractDtos.stream()
.filter(
item -> Objects.equals(item.getContractType(), ContractTypeEnum.DEPENDENCY.getCode()))
.collect(Collectors.groupingBy(AppContractDto::getOperationId,
Collectors.toMap(AppContractDto::getId, Function.identity())));

appOperationAndDependencyInfo.setOperationMap(operationMap);
appOperationAndDependencyInfo.setAppContractDtoMap(appContractDtoMap);
return appOperationAndDependencyInfo;
}

protected <T extends AbstractComparisonDetailsConfiguration> void buildComparisonConfig(
Map<String, ReplayCompareConfig.ReplayComparisonItem> replayConfigurationMap,
List<T> configurations,
Expand All @@ -397,6 +434,12 @@ protected <T extends AbstractComparisonDetailsConfiguration> void buildCompariso
new ReplayCompareConfig.ReplayComparisonItem());
tempReplayComparisonItem.setOperationId(operationId);
ApplicationOperationConfiguration operationConfiguration = operationMap.get(operationId);

// not the config of global and not exist in the list of operations
if (operationId != null && operationConfiguration == null) {
continue;
}

if (operationConfiguration != null) {
tempReplayComparisonItem
.setOperationTypes(new ArrayList<>(operationConfiguration.getOperationTypes()));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package com.arextest.web.model.contract.contracts.config.replay;

import javax.validation.constraints.NotBlank;
import lombok.Data;

@Data
public class QueryCompareConfigRequestType {

@NotBlank(message = "appId can not be blank")
private String appId;

private String operationName;

}
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -495,7 +495,7 @@

<properties>
<!-- Maven CI Friendly Versions https://maven.apache.org/maven-ci-friendly.html -->
<revision>0.6.4.12</revision>
<revision>0.6.4.13</revision>
<arex-common.version>0.1.28</arex-common.version>
<arex-extension-interface.version>0.0.1</arex-extension-interface.version>
<arex-storage-config.version>1.2.7</arex-storage-config.version>
Expand Down