Skip to content

Commit

Permalink
Feat/support query with column name (#458)
Browse files Browse the repository at this point in the history
* query compare configuration by names

* fix regex problem of special chars

* update version
  • Loading branch information
binyu1005 authored Dec 23, 2024
1 parent f211202 commit cc1d4d4
Show file tree
Hide file tree
Showing 33 changed files with 424 additions and 68 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.arextest.web.core.business.config.replay.ComparisonExclusionsConfigurableHandler;
import com.arextest.web.model.contract.contracts.config.replay.ComparisonExclusionsConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryExclusionRequestType;
import com.arextest.web.model.contract.contracts.config.replay.QueryComparisonRequestType;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -76,7 +77,7 @@ public Response queryComparisonConfig(@RequestBody QueryComparisonRequestType re

@PostMapping("/pageQueryComparisonConfig")
@ResponseBody
public Response pageQueryComparisonConfig(@RequestBody PageQueryComparisonRequestType request) {
public Response pageQueryComparisonConfig(@RequestBody PageQueryExclusionRequestType request) {
return ResponseUtils.successResponse(
exclusionsHandler.pageQueryComparisonConfig(request)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import com.arextest.web.core.business.config.ConfigurableHandler;
import com.arextest.web.core.business.config.replay.ComparisonIgnoreCategoryConfigurableHandler;
import com.arextest.web.model.contract.contracts.config.replay.ComparisonIgnoreCategoryConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryCategoryRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.QueryComparisonRequestType;
import java.util.List;
Expand Down Expand Up @@ -64,7 +65,7 @@ public Response queryComparisonConfig(@RequestBody QueryComparisonRequestType re

@PostMapping("/pageQueryComparisonConfig")
@ResponseBody
public Response pageQueryComparisonConfig(@RequestBody PageQueryComparisonRequestType request) {
public Response pageQueryComparisonConfig(@RequestBody PageQueryCategoryRequestType request) {
return ResponseUtils.successResponse(
ignoreCategoryHandler.pageQueryComparisonConfig(request)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import com.arextest.web.core.business.config.replay.ComparisonListSortConfigurableHandler;
import com.arextest.web.model.contract.contracts.config.replay.ComparisonListSortConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryListSortRequestType;
import com.arextest.web.model.contract.contracts.config.replay.QueryComparisonRequestType;
import jakarta.annotation.Resource;
import lombok.Getter;
Expand Down Expand Up @@ -71,7 +72,7 @@ public Response queryComparisonConfig(@RequestBody QueryComparisonRequestType re

@PostMapping("/pageQueryComparisonConfig")
@ResponseBody
public Response pageQueryComparisonConfig(@RequestBody PageQueryComparisonRequestType request) {
public Response pageQueryComparisonConfig(@RequestBody PageQueryListSortRequestType request) {
return ResponseUtils.successResponse(
comparisonListSortConfigurableHandler.pageQueryComparisonConfig(request)
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.arextest.web.model.contract.contracts.config.replay.ComparisonRootTransformConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.ComparisonTransformConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryTransformRequestType;
import com.arextest.web.model.contract.contracts.config.replay.QueryComparisonRequestType;
import com.arextest.web.model.mapper.ConfigComparisonTransformMapper;
import java.util.List;
Expand Down Expand Up @@ -72,7 +73,7 @@ public Response modify(@PathVariable ModifyType modifyType,

@PostMapping("/pageQueryComparisonConfig")
@ResponseBody
public Response pageQueryComparisonConfig(@RequestBody PageQueryComparisonRequestType request) {
public Response pageQueryComparisonConfig(@RequestBody PageQueryTransformRequestType request) {
return ResponseUtils.successResponse(
comparisonTransformConfigurableHandler.pageQueryComparisonConfig(request)
);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.arextest.web.common;

import java.util.HashSet;
import java.util.Set;

/**
* @author b_yu
* @since 2024/12/20
*/

public class RegexUtils {

private static final Set<Character> SPECIAL_CHARS = new HashSet<>();

static {
char[] specialCharsArray = {'.', '\\', '+', '*', '?', '[', '^', ']', '$', '(', ')', '{', '}',
'=', '!', '<', '>', '|', ':', '-'};
for (char c : specialCharsArray) {
SPECIAL_CHARS.add(c);
}
}

public static String getRegexForFuzzySearch(String keyword) {
if (keyword == null || keyword.isEmpty()) {
return keyword;
}
return ".*?" + escapeSpecialChars(keyword) + ".*";
}

private static String escapeSpecialChars(String keyword) {
if (keyword == null || keyword.isEmpty()) {
return keyword;
}
StringBuilder escapedKeyword = new StringBuilder();
for (char c : keyword.toCharArray()) {
if (SPECIAL_CHARS.contains(c)) {
escapedKeyword.append('\\');
}
escapedKeyword.append(c);
}
return escapedKeyword.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.arextest.web.core.repository.AppContractRepository;
import com.arextest.web.model.contract.contracts.config.replay.AbstractComparisonDetailsConfiguration;
import com.arextest.web.model.dto.AppContractDto;
import com.arextest.web.model.dto.config.PageQueryComparisonDto;
import com.arextest.web.model.enums.ContractTypeEnum;
import java.util.Collections;
import java.util.Date;
Expand Down Expand Up @@ -182,4 +183,29 @@ void addDependencyId(List<T> comparisonDetails) {
}
}
}

protected boolean queryIdsByKeywords(PageQueryComparisonDto dto,
ApplicationOperationConfigurationRepositoryImpl serviceOperationRepository) {
if (StringUtils.isNotBlank(dto.getKeyOfOperationName())) {
List<ApplicationOperationConfiguration> serviceOperations = serviceOperationRepository.queryLikeOperationName(
dto.getAppId(), dto.getKeyOfOperationName());
if (CollectionUtils.isEmpty(serviceOperations)) {
return false;
}
dto.setOperationIds(serviceOperations.stream().map(ApplicationOperationConfiguration::getId)
.collect(Collectors.toList()));
}

if (StringUtils.isNotBlank(dto.getKeyOfDependencyName())) {
List<AppContractDto> contractDtos = appContractRepository.queryLikeOperationName(
dto.getAppId(),
dto.getKeyOfDependencyName());
if (CollectionUtils.isEmpty(contractDtos)) {
return false;
}
dto.setDependencyIds(
contractDtos.stream().map(AppContractDto::getId).collect(Collectors.toList()));
}
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@
import com.arextest.web.model.contract.contracts.config.replay.ComparisonExclusionsConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonResponseType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryExclusionRequestType;
import com.arextest.web.model.dto.config.PageQueryComparisonDto;
import com.arextest.web.model.dto.config.PageQueryComparisonResultDto;
import com.arextest.web.model.dto.config.PageQueryExclusionDto;
import com.arextest.web.model.dto.filesystem.FSInterfaceDto;
import com.arextest.web.model.mapper.PageQueryComparisonMapper;
import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
Expand Down Expand Up @@ -77,10 +80,17 @@ public List<ComparisonExclusionsConfiguration> queryByInterfaceId(String interfa
return result;
}

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();

public PageQueryComparisonResponseType pageQueryComparisonConfig(
PageQueryComparisonRequestType requestType) {
PageQueryComparisonDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
PageQueryExclusionRequestType requestType) {
PageQueryExclusionDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
requestType);
if (!queryIdsByKeywords(pageQueryComparisonDto, applicationOperationConfigurationRepository)) {
result.setTotalCount(0L);
result.setExclusions(Collections.emptyList());
return result;
}
PageQueryComparisonResultDto<ComparisonExclusionsConfiguration> queryResult =
comparisonExclusionsConfigurationRepository.pageQueryComparisonConfig(
pageQueryComparisonDto);
Expand All @@ -91,7 +101,6 @@ public PageQueryComparisonResponseType pageQueryComparisonConfig(
applicationOperationConfigurationRepository);
Map<String, Dependency> dependencyInfos = getDependencyInfos(configs, appContractRepository);

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();
result.setTotalCount(queryResult.getTotalCount());
result.setExclusions(contractFromDto(configs, operationInfos, dependencyInfos));
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,17 @@
import com.arextest.web.core.repository.mongo.ComparisonIgnoreCategoryConfigurationRepositoryImpl;
import com.arextest.web.model.contract.contracts.compare.CategoryDetail;
import com.arextest.web.model.contract.contracts.config.replay.ComparisonIgnoreCategoryConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryCategoryRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonResponseType;
import com.arextest.web.model.dto.config.PageQueryCategoryDto;
import com.arextest.web.model.dto.config.PageQueryComparisonDto;
import com.arextest.web.model.dto.config.PageQueryComparisonResultDto;
import com.arextest.web.model.dto.filesystem.FSInterfaceDto;
import com.arextest.web.model.mapper.PageQueryComparisonMapper;
import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -102,9 +105,15 @@ public boolean update(ComparisonIgnoreCategoryConfiguration configuration) {


public PageQueryComparisonResponseType pageQueryComparisonConfig(
PageQueryComparisonRequestType requestType) {
PageQueryComparisonDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
PageQueryCategoryRequestType requestType) {
PageQueryCategoryDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
requestType);
PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();
if (!queryIdsByKeywords(pageQueryComparisonDto, applicationOperationConfigurationRepository)) {
result.setTotalCount(0L);
result.setIgnoreCategories(Collections.emptyList());
return result;
}
PageQueryComparisonResultDto<ComparisonIgnoreCategoryConfiguration> queryResult =
ignoreCategoryConfigurationRepository.pageQueryComparisonConfig(
pageQueryComparisonDto);
Expand All @@ -115,7 +124,7 @@ public PageQueryComparisonResponseType pageQueryComparisonConfig(
applicationOperationConfigurationRepository);
Map<String, Dependency> dependencyInfos = getDependencyInfos(configs, appContractRepository);

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();

result.setTotalCount(queryResult.getTotalCount());
result.setIgnoreCategories(contractFromDto(configs, operationInfos, dependencyInfos));
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@
import com.arextest.web.model.contract.contracts.config.replay.ComparisonListSortConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonResponseType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryListSortRequestType;
import com.arextest.web.model.dto.config.PageQueryComparisonDto;
import com.arextest.web.model.dto.config.PageQueryComparisonResultDto;
import com.arextest.web.model.dto.config.PageQueryListSortDto;
import com.arextest.web.model.dto.filesystem.FSInterfaceDto;
import com.arextest.web.model.mapper.PageQueryComparisonMapper;
import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
Expand Down Expand Up @@ -77,9 +80,16 @@ public boolean insertList(List<ComparisonListSortConfiguration> configurationLis
}

public PageQueryComparisonResponseType pageQueryComparisonConfig(
PageQueryComparisonRequestType requestType) {
PageQueryComparisonDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
PageQueryListSortRequestType requestType) {
PageQueryListSortDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
requestType);

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();
if (!queryIdsByKeywords(pageQueryComparisonDto, applicationOperationConfigurationRepository)) {
result.setTotalCount(0L);
result.setListSorts(Collections.emptyList());
return result;
}
PageQueryComparisonResultDto<ComparisonListSortConfiguration> queryResult =
listSortConfigurationRepository.pageQueryComparisonConfig(
pageQueryComparisonDto);
Expand All @@ -90,7 +100,6 @@ public PageQueryComparisonResponseType pageQueryComparisonConfig(
applicationOperationConfigurationRepository);
Map<String, Dependency> dependencyInfos = getDependencyInfos(configs, appContractRepository);

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();
result.setTotalCount(queryResult.getTotalCount());
result.setListSorts(contractFromDto(configs, operationInfos, dependencyInfos));
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@
import com.arextest.web.model.contract.contracts.config.replay.ComparisonTransformConfiguration;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonRequestType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryComparisonResponseType;
import com.arextest.web.model.contract.contracts.config.replay.PageQueryTransformRequestType;
import com.arextest.web.model.dto.config.PageQueryComparisonDto;
import com.arextest.web.model.dto.config.PageQueryComparisonResultDto;
import com.arextest.web.model.dto.config.PageQueryTransformDto;
import com.arextest.web.model.dto.filesystem.FSInterfaceDto;
import com.arextest.web.model.mapper.PageQueryComparisonMapper;
import jakarta.annotation.Resource;
Expand Down Expand Up @@ -94,9 +96,16 @@ public List<String> getTransformMethodList() {
}

public PageQueryComparisonResponseType pageQueryComparisonConfig(
PageQueryComparisonRequestType requestType) {
PageQueryComparisonDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
PageQueryTransformRequestType requestType) {
PageQueryTransformDto pageQueryComparisonDto = PageQueryComparisonMapper.INSTANCE.dtoFromContract(
requestType);

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();
if (!queryIdsByKeywords(pageQueryComparisonDto, applicationOperationConfigurationRepository)) {
result.setTotalCount(0L);
result.setRootTransformInfos(Collections.emptyList());
return result;
}
PageQueryComparisonResultDto<ComparisonTransformConfiguration> queryResult =
comparisonTransformConfigurationRepository.pageQueryComparisonConfig(
pageQueryComparisonDto);
Expand All @@ -107,7 +116,6 @@ public PageQueryComparisonResponseType pageQueryComparisonConfig(
applicationOperationConfigurationRepository);
Map<String, Dependency> dependencyInfos = getDependencyInfos(configs, appContractRepository);

PageQueryComparisonResponseType result = new PageQueryComparisonResponseType();
result.setTotalCount(queryResult.getTotalCount());
result.setRootTransformInfos(contractFromDto(configs, operationInfos, dependencyInfos));
return result;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,6 @@ List<AppContractDto> queryDependencyWithAppId(String appId, String operationName
String operationType);

List<AppContractDto> queryAppContractsByIds(Collection<String> ids);

List<AppContractDto> queryLikeOperationName(String appId, String operationName);
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.arextest.web.core.repository.mongo;

import com.arextest.web.common.LogUtils;
import com.arextest.web.common.RegexUtils;
import com.arextest.web.core.repository.AppContractRepository;
import com.arextest.web.core.repository.mongo.util.MongoHelper;
import com.arextest.web.model.dao.mongodb.AppContractCollection;
Expand Down Expand Up @@ -224,4 +225,18 @@ public List<AppContractDto> queryAppContractsByIds(Collection<String> ids) {
.stream().map(AppContractMapper.INSTANCE::dtoFromDao)
.collect(Collectors.toList());
}

@Override
public List<AppContractDto> queryLikeOperationName(String appId,
String operationName) {
if (StringUtils.isBlank(operationName)) {
return Collections.emptyList();
}
Query query = Query.query(Criteria.where(AppContractCollection.Fields.appId).is(appId)
.and(AppContractCollection.Fields.operationName).regex(
RegexUtils.getRegexForFuzzySearch(operationName), "i"));

return mongoTemplate.find(query, AppContractCollection.class)
.stream().map(AppContractMapper.INSTANCE::dtoFromDao).collect(Collectors.toList());
}
}
Loading

0 comments on commit cc1d4d4

Please sign in to comment.