重构UserAIModelConfigServiceImpl的setDefaultConfiguration逻辑,并为AdminModelConfig的enabled字段设置默认值
This commit is contained in:
@@ -381,7 +381,7 @@ public class AdminModelConfigController {
|
||||
.provider(requestDTO.getProvider())
|
||||
.modelId(requestDTO.getModelId())
|
||||
.displayName(requestDTO.getDisplayName())
|
||||
.enabled(requestDTO.getEnabled())
|
||||
.enabled(requestDTO.getEnabled() != null ? requestDTO.getEnabled() : true)
|
||||
.apiEndpoint(requestDTO.getApiEndpoint())
|
||||
.enabledForFeatures(requestDTO.getEnabledForFeatures())
|
||||
.creditRateMultiplier(requestDTO.getCreditRateMultiplier())
|
||||
|
||||
@@ -12,7 +12,6 @@ import reactor.core.publisher.Mono;
|
||||
public interface UserAIModelConfigRepository extends ReactiveMongoRepository<UserAIModelConfig, String> {
|
||||
|
||||
Flux<UserAIModelConfig> findByUserId(String userId);
|
||||
|
||||
Mono<UserAIModelConfig> findByUserIdAndId(String userId, String id);
|
||||
|
||||
Mono<UserAIModelConfig> findByUserIdAndProviderAndModelName(String userId, String provider, String modelName);
|
||||
|
||||
@@ -174,43 +174,37 @@ public class UserAIModelConfigServiceImpl implements UserAIModelConfigService {
|
||||
@Override
|
||||
@Transactional
|
||||
public Mono<UserAIModelConfig> setDefaultConfiguration(String userId, String configId) {
|
||||
return configRepository.findByUserIdAndId(userId, configId)
|
||||
// 查找要设为默认的配置,并确保它存在且已验证
|
||||
Mono<UserAIModelConfig> configToSetDefaultMono = configRepository.findByUserIdAndId(userId, configId)
|
||||
.switchIfEmpty(Mono.error(new RuntimeException("配置不存在或无权访问")))
|
||||
.flatMap(configToSetDefault -> {
|
||||
if (!configToSetDefault.getIsValidated()) {
|
||||
.flatMap(config -> {
|
||||
if (!config.getIsValidated()) {
|
||||
return Mono.error(new IllegalArgumentException("无法将未验证的配置设为默认"));
|
||||
}
|
||||
if (configToSetDefault.isDefault()) {
|
||||
return Mono.just(configToSetDefault);
|
||||
if (config.isDefault()) {
|
||||
return Mono.just(config); // 如果已经是默认,直接返回
|
||||
}
|
||||
|
||||
return configRepository.findByUserIdAndIsDefaultIsTrue(userId)
|
||||
.flatMap(currentDefault -> {
|
||||
if (!currentDefault.getId().equals(configId)) {
|
||||
currentDefault.setDefault(false);
|
||||
currentDefault.setUpdatedAt(LocalDateTime.now());
|
||||
return configRepository.save(currentDefault);
|
||||
}
|
||||
return Mono.empty();
|
||||
})
|
||||
.thenMany(configRepository.findByUserIdAndIsDefaultIsFalse(userId))
|
||||
.filter(config -> !config.getId().equals(configId))
|
||||
.flatMap(config -> {
|
||||
if (config.isDefault()) {
|
||||
config.setDefault(false);
|
||||
config.setUpdatedAt(LocalDateTime.now());
|
||||
return configRepository.save(config);
|
||||
}
|
||||
return Mono.empty();
|
||||
})
|
||||
.then()
|
||||
.then(Mono.fromCallable(() -> {
|
||||
configToSetDefault.setDefault(true);
|
||||
configToSetDefault.setUpdatedAt(LocalDateTime.now());
|
||||
return configToSetDefault;
|
||||
}))
|
||||
.flatMap(configRepository::save);
|
||||
return Mono.just(config);
|
||||
});
|
||||
|
||||
// 事务性操作:先将所有配置取消默认,再设置新的默认
|
||||
return configToSetDefaultMono.flatMap(configToSetDefault ->
|
||||
configRepository.findByUserId(userId)
|
||||
.flatMap(config -> {
|
||||
if (config.isDefault()) {
|
||||
config.setDefault(false);
|
||||
config.setUpdatedAt(LocalDateTime.now());
|
||||
return configRepository.save(config);
|
||||
}
|
||||
return Mono.empty();
|
||||
})
|
||||
.then()
|
||||
.then(Mono.defer(() -> {
|
||||
configToSetDefault.setDefault(true);
|
||||
configToSetDefault.setUpdatedAt(LocalDateTime.now());
|
||||
return configRepository.save(configToSetDefault);
|
||||
}))
|
||||
);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user