diff --git a/backend/src/main/java/AppConfig.java b/backend/src/main/java/AppConfig.java index bf138034..2feab497 100644 --- a/backend/src/main/java/AppConfig.java +++ b/backend/src/main/java/AppConfig.java @@ -3,6 +3,7 @@ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.security.cert.X509Certificate; import java.time.Duration; +import java.util.Map; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; @@ -11,6 +12,7 @@ import javax.sql.DataSource; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.StreamReadConstraints; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.module.SimpleModule; @@ -40,7 +42,9 @@ import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.springframework.web.client.RestTemplate; import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import ru.micord.ervu.account_applications.deserializer.DataWrapperDeserializer; import ru.micord.ervu.account_applications.deserializer.ReferenceEntityDeserializer; +import ru.micord.ervu.account_applications.model.DataWrapper; import ru.micord.ervu.account_applications.model.ReferenceEntity; /** @@ -162,7 +166,7 @@ public class AppConfig { .build(); SimpleModule module = new SimpleModule(); - module.addDeserializer(ReferenceEntity.class, new ReferenceEntityDeserializer()); + customDeserializers().forEach(module::addDeserializer); return new ObjectMapper(factory) .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false) @@ -171,4 +175,11 @@ public class AppConfig { .configure(DeserializationFeature.READ_UNKNOWN_ENUM_VALUES_USING_DEFAULT_VALUE, true) .registerModules(new JavaTimeModule(), module); } + + private Map customDeserializers() { + return Map.of( + ReferenceEntity.class, new ReferenceEntityDeserializer(), + DataWrapper.class, new DataWrapperDeserializer() + ); + } } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/deserializer/DataWrapperDeserializer.java b/backend/src/main/java/ru/micord/ervu/account_applications/deserializer/DataWrapperDeserializer.java new file mode 100644 index 00000000..e1951b01 --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/deserializer/DataWrapperDeserializer.java @@ -0,0 +1,39 @@ +package ru.micord.ervu.account_applications.deserializer; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import com.fasterxml.jackson.core.JacksonException; +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; +import ru.micord.ervu.account_applications.model.DataWrapper; + +/** + * @author Adel Kalimullin + */ +public class DataWrapperDeserializer extends JsonDeserializer { + + @Override + public DataWrapper deserialize(JsonParser jsonParser, + DeserializationContext deserializationContext) throws IOException, JacksonException { + JsonNode node = jsonParser.readValueAsTree(); + if (node.isTextual()){ + return new DataWrapper(List.of(node.asText())); + } + else if (node.isArray()){ + List values = new ArrayList<>(); + for (JsonNode element : node) { + if (element.isTextual()) { + values.add(element.asText()); + } + } + return new DataWrapper(values); + } + + return new DataWrapper(Collections.emptyList()); + } +} diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/model/ChangeActiveMessage.java b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/model/ChangeActiveMessage.java index 6bc17657..e19c8857 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/kafka/model/ChangeActiveMessage.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/kafka/model/ChangeActiveMessage.java @@ -1,9 +1,7 @@ package ru.micord.ervu.account_applications.kafka.model; -import java.util.List; - import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import ru.micord.ervu.account_applications.model.ReferenceEntity; +import ru.micord.ervu.account_applications.model.DataWrapper; /** * @author Adel Kalimullin @@ -11,13 +9,13 @@ import ru.micord.ervu.account_applications.model.ReferenceEntity; @JsonIgnoreProperties(ignoreUnknown = true) public class ChangeActiveMessage { private boolean success; - private List data; + private DataWrapper data; - public List getData() { + public DataWrapper getData() { return data; } - public void setData(List data) { + public void setData(DataWrapper data) { this.data = data; } diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/model/DataWrapper.java b/backend/src/main/java/ru/micord/ervu/account_applications/model/DataWrapper.java new file mode 100644 index 00000000..5ee14e1e --- /dev/null +++ b/backend/src/main/java/ru/micord/ervu/account_applications/model/DataWrapper.java @@ -0,0 +1,18 @@ +package ru.micord.ervu.account_applications.model; + +import java.util.List; + +/** + * @author Adel Kalimullin + */ +public class DataWrapper { + private final List ids; + + public DataWrapper(List values) { + this.ids = values; + } + + public List getIds() { + return ids; + } +} \ No newline at end of file diff --git a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java index b9d9c20f..6d4a324e 100644 --- a/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java +++ b/backend/src/main/java/ru/micord/ervu/account_applications/service/ErvuDirectoriesService.java @@ -99,13 +99,15 @@ public class ErvuDirectoriesService { ChangeActiveMessage.class ); - if (changeActiveMessage.isSuccess() && !CollectionUtils.isEmpty(changeActiveMessage.getData())) { + if (changeActiveMessage.isSuccess() && + changeActiveMessage.getData() != null && + !CollectionUtils.isEmpty(changeActiveMessage.getData().getIds())) { DataProcessor processor = (DataProcessor) dataProcessors.get(entityClass); if (processor == null) { throw new IllegalStateException("No processor found for " + entityClass.getSimpleName()); } - processor.changeActiveStatus(changeActiveMessage.getData(), active); + processor.changeActiveStatus(changeActiveMessage.getData().getIds(), active); } } catch (Exception e) {