Skip to content

Commit 26e1ea0

Browse files
committed
refactor: rename UtmStackConnectionService to ModuleConfigurationValidationService and enhance validation logic
1 parent 632401f commit 26e1ea0

File tree

4 files changed

+122
-53
lines changed

4 files changed

+122
-53
lines changed

backend/src/main/java/com/park/utmstack/domain/application_modules/factory/impl/ModuleSocAi.java

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.park.utmstack.domain.application_modules.types.ModuleConfigurationKey;
88
import com.park.utmstack.domain.application_modules.types.ModuleRequirement;
99
import com.park.utmstack.domain.application_modules.validators.UtmModuleConfigValidator;
10+
import com.park.utmstack.repository.UtmModuleGroupConfigurationRepository;
1011
import com.park.utmstack.service.application_modules.UtmModuleService;
1112
import lombok.RequiredArgsConstructor;
1213
import org.springframework.stereotype.Component;
@@ -23,6 +24,7 @@ public class ModuleSocAi implements IModule {
2324

2425
private final UtmModuleService moduleService;
2526
private final UtmModuleConfigValidator utmStackConfigValidator;
27+
private final UtmModuleGroupConfigurationRepository moduleGroupConfigurationRepository;
2628

2729
@Override
2830
public UtmModule getDetails(Long serverId) throws Exception {
@@ -102,12 +104,53 @@ public List<ModuleConfigurationKey> getConfigurationKeys(Long groupId) throws Ex
102104
return keys;
103105
}
104106

105-
public boolean validateConfiguration(UtmModule module, List<UtmModuleGroupConfiguration> configuration) throws Exception {
106-
return utmStackConfigValidator.validate(module, configuration);
107+
public boolean validateConfiguration(UtmModule module, List<UtmModuleGroupConfiguration> configuration) {
108+
109+
if(configuration == null || configuration.isEmpty()) {
110+
throw new IllegalArgumentException("Configurations cannot be null or empty");
111+
}
112+
113+
Long groupId = configuration.get(0).getGroupId();
114+
115+
List<UtmModuleGroupConfiguration> dbConfigs = moduleGroupConfigurationRepository
116+
.findAllByGroupId(groupId);
117+
118+
UtmModuleGroupConfiguration providerConfig = configuration.stream()
119+
.filter(c -> "utmstack.socai.provider".equals(c.getConfKey()))
120+
.findFirst()
121+
.orElseGet(() -> dbConfigs.stream()
122+
.filter(c -> "utmstack.socai.provider".equals(c.getConfKey()))
123+
.findFirst()
124+
.orElse(null));
125+
126+
List<UtmModuleGroupConfiguration> configs = dbConfigs.stream()
127+
.filter(c -> !"utmstack.socai.provider".equals(c.getConfKey()))
128+
.toList();
129+
130+
List<UtmModuleGroupConfiguration> filteredConfigs = providerConfig != null && "custom".equals(providerConfig.getConfValue())
131+
? filterCustomConfigs(configs)
132+
: filterStandardConfigs(configs);
133+
134+
filteredConfigs.add(providerConfig);
135+
136+
return utmStackConfigValidator.validate(module, configuration, filteredConfigs);
107137
}
108138

109139
@Override
110140
public ModuleName getName() {
111141
return ModuleName.SOC_AI;
112142
}
143+
144+
private List<UtmModuleGroupConfiguration> filterCustomConfigs(List<UtmModuleGroupConfiguration> configs) {
145+
return configs.stream()
146+
.filter(config -> !config.getConfKey().equals("utmstack.socai.model"))
147+
.collect(Collectors.toList());
148+
}
149+
150+
private List<UtmModuleGroupConfiguration> filterStandardConfigs(List<UtmModuleGroupConfiguration> configs) {
151+
return configs.stream()
152+
.filter(config -> !config.getConfKey().equals("utmstack.socai.custom.model") &&
153+
!config.getConfKey().equals("utmstack.socai.custom.url"))
154+
.collect(Collectors.toList());
155+
}
113156
}

backend/src/main/java/com/park/utmstack/domain/application_modules/validators/UtmModuleConfigValidator.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,29 +4,34 @@
44
import com.park.utmstack.domain.application_modules.UtmModule;
55
import com.park.utmstack.domain.application_modules.UtmModuleGroupConfiguration;
66
import com.park.utmstack.repository.UtmModuleGroupConfigurationRepository;
7-
import com.park.utmstack.service.application_modules.connectors.UtmStackConnectionService;
7+
import com.park.utmstack.service.application_modules.connectors.ModuleConfigurationValidationService;
88
import com.park.utmstack.service.dto.application_modules.UtmModuleGroupConfDTO;
99
import com.park.utmstack.service.dto.application_modules.UtmModuleGroupConfWrapperDTO;
1010
import com.park.utmstack.util.CipherUtil;
1111
import lombok.RequiredArgsConstructor;
1212
import org.springframework.stereotype.Service;
1313

1414
import java.util.List;
15-
import java.util.stream.Collectors;
1615

1716
@Service
1817
@RequiredArgsConstructor
1918
public class UtmModuleConfigValidator {
2019

2120
private final UtmModuleGroupConfigurationRepository moduleGroupConfigurationRepository;
22-
private final UtmStackConnectionService utmStackConnectionService;
21+
private final ModuleConfigurationValidationService utmStackConnectionService;
2322

24-
public boolean validate(UtmModule module, List<UtmModuleGroupConfiguration> keys) throws Exception {
23+
public boolean validate(UtmModule module, List<UtmModuleGroupConfiguration> keys) {
2524
if (keys.isEmpty()) return false;
2625

2726
List<UtmModuleGroupConfiguration> dbConfigs = moduleGroupConfigurationRepository
2827
.findAllByGroupId(keys.get(0).getGroupId());
2928

29+
return validate(module, keys, dbConfigs);
30+
}
31+
32+
public boolean validate(UtmModule module, List<UtmModuleGroupConfiguration> keys, List<UtmModuleGroupConfiguration> dbConfigs) {
33+
if (keys.isEmpty()) return false;
34+
3035
List<UtmModuleGroupConfDTO> configDTOs = dbConfigs.stream()
3136
.map(dbConf -> {
3237
UtmModuleGroupConfiguration override = findInKeys(keys, dbConf.getConfKey());
@@ -41,7 +46,7 @@ public boolean validate(UtmModule module, List<UtmModuleGroupConfiguration> keys
4146

4247
UtmModuleGroupConfWrapperDTO body = new UtmModuleGroupConfWrapperDTO(configDTOs);
4348

44-
return utmStackConnectionService.testConnection(module.getModuleName().name(), body);
49+
return utmStackConnectionService.validateModuleConfiguration(module.getModuleName().name(), body);
4550
}
4651

4752
private UtmModuleGroupConfiguration findInKeys(List<UtmModuleGroupConfiguration> keys, String confKey) {
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.park.utmstack.service.application_modules.connectors;
2+
3+
import com.park.utmstack.config.Constants;
4+
import com.park.utmstack.service.dto.application_modules.UtmModuleGroupConfWrapperDTO;
5+
import com.park.utmstack.service.web_clients.rest_template.RestTemplateService;
6+
import com.park.utmstack.util.exceptions.ApiException;
7+
import lombok.RequiredArgsConstructor;
8+
import org.slf4j.Logger;
9+
import org.slf4j.LoggerFactory;
10+
import org.springframework.http.*;
11+
import org.springframework.stereotype.Service;
12+
13+
import java.util.List;
14+
15+
16+
@Service
17+
@RequiredArgsConstructor
18+
public class ModuleConfigurationValidationService {
19+
20+
private final Logger log = LoggerFactory.getLogger(ModuleConfigurationValidationService.class);
21+
private final RestTemplateService restTemplateService;
22+
private static final String CLASSNAME = "UtmStackConnectionService";
23+
24+
25+
public boolean validateModuleConfiguration(String module, UtmModuleGroupConfWrapperDTO configurations) {
26+
final String ctx = CLASSNAME + ".ModuleConfigurationValidationService";
27+
HttpHeaders headers = new HttpHeaders();
28+
headers.add("Content-Type", "application/json");
29+
headers.add("Accept", "*/*");
30+
headers.set(Constants.EVENT_PROCESSOR_INTERNAL_KEY_HEADER, System.getenv(Constants.ENV_INTERNAL_KEY));
31+
32+
String baseUrl = "http://" + System.getenv(Constants.ENV_EVENT_PROCESSOR_HOST) + ":" + System.getenv(Constants.ENV_EVENT_PROCESSOR_PORT);
33+
String endPoint = baseUrl + "/api/v1/modules-config/validate?nameShort=" + module;
34+
try{
35+
ResponseEntity<String> response = restTemplateService.post(
36+
endPoint,
37+
configurations,
38+
String.class,
39+
headers
40+
);
41+
42+
if (!response.getStatusCode().is2xxSuccessful()) {
43+
List<String> errors = response.getHeaders().get("X-UtmStack-error");
44+
String errorMessage = (errors != null && !errors.isEmpty())
45+
? String.join(", ", errors)
46+
: "Unknown error occurred during module configuration validation.";
47+
48+
log.error("{}: Module configuration validation failed for module: {} with status: {}. Cause: {}",
49+
ctx, module, response.getStatusCode(), errorMessage);
50+
throw new ApiException(
51+
String.format("Module configuration validation failed for module: %s. Cause: %s", module, errorMessage),
52+
response.getStatusCode()
53+
);
54+
}
55+
56+
return true;
57+
58+
} catch (ApiException e) {
59+
throw e;
60+
} catch (Exception e) {
61+
log.error("{}: An error occurred while validating module configuration for module: {}. Cause: {}",
62+
ctx, module, e.getMessage(), e);
63+
throw new ApiException("An error occurred while validating module configuration", HttpStatus.INTERNAL_SERVER_ERROR);
64+
}
65+
}
66+
}
67+

backend/src/main/java/com/park/utmstack/service/application_modules/connectors/UtmStackConnectionService.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

0 commit comments

Comments
 (0)