diff --git a/core/src/main/java/com/databasir/core/domain/document/diff/DiffTypePredictor.java b/core/src/main/java/com/databasir/core/domain/document/diff/DiffTypePredictor.java new file mode 100644 index 0000000..7e4c006 --- /dev/null +++ b/core/src/main/java/com/databasir/core/domain/document/diff/DiffTypePredictor.java @@ -0,0 +1,31 @@ +package com.databasir.core.domain.document.diff; + +import com.databasir.core.diff.data.DiffType; +import com.databasir.core.domain.document.data.DatabaseDocumentSimpleResponse; + +import java.util.List; + +public class DiffTypePredictor { + + public static DiffType predict(List result) { + long changedItemSize = result.stream() + .filter(item -> !item.getDiffType().isNone()) + .count(); + long addedItemSize = result.stream() + .filter(item -> !item.getDiffType().isNone()) + .filter(item -> item.getDiffType().isAdded()) + .count(); + long removedItemSize = result.stream() + .filter(item -> !item.getDiffType().isNone()) + .filter(item -> item.getDiffType().isRemoved()) + .count(); + if (changedItemSize > 0 && addedItemSize == changedItemSize) { + return DiffType.ADDED; + } else if (changedItemSize > 0 && removedItemSize == changedItemSize) { + return DiffType.REMOVED; + } else { + return result.stream() + .anyMatch(t -> t.getDiffType() != DiffType.NONE) ? DiffType.MODIFIED : DiffType.NONE; + } + } +} diff --git a/core/src/main/java/com/databasir/core/domain/document/service/DocumentService.java b/core/src/main/java/com/databasir/core/domain/document/service/DocumentService.java index 3edb3ec..f018eb7 100644 --- a/core/src/main/java/com/databasir/core/domain/document/service/DocumentService.java +++ b/core/src/main/java/com/databasir/core/domain/document/service/DocumentService.java @@ -13,6 +13,7 @@ import com.databasir.core.domain.document.comparator.TableDiffResult; import com.databasir.core.domain.document.converter.*; import com.databasir.core.domain.document.data.*; import com.databasir.core.domain.document.data.TableDocumentResponse.ForeignKeyDocumentResponse; +import com.databasir.core.domain.document.diff.DiffTypePredictor; import com.databasir.core.domain.document.event.DocumentUpdated; import com.databasir.core.domain.document.generator.DocumentFileGenerator; import com.databasir.core.domain.document.generator.DocumentFileGenerator.DocumentFileGenerateContext; @@ -274,16 +275,7 @@ public class DocumentService { } } result.sort(Comparator.comparing(DatabaseDocumentSimpleResponse.TableData::getName)); - var notNoneDiffs = result.stream().filter(item -> !item.getDiffType().isNone()); - boolean allAdded = notNoneDiffs.count() > 0 - && notNoneDiffs.allMatch(item -> item.getDiffType().isAdded()); - DiffType diffType; - if (allAdded) { - diffType = DiffType.ADDED; - } else { - diffType = result.stream() - .anyMatch(t -> t.getDiffType() != DiffType.NONE) ? DiffType.MODIFIED : DiffType.NONE; - } + DiffType diffType = DiffTypePredictor.predict(result); return documentSimpleResponseConverter.of(document, result, diffType, projectName); } else { tableMetas.sort(Comparator.comparing(DatabaseDocumentSimpleResponse.TableData::getName)); diff --git a/meta/src/main/java/com/databasir/core/diff/data/DiffType.java b/meta/src/main/java/com/databasir/core/diff/data/DiffType.java index 20f2423..2113af5 100644 --- a/meta/src/main/java/com/databasir/core/diff/data/DiffType.java +++ b/meta/src/main/java/com/databasir/core/diff/data/DiffType.java @@ -11,6 +11,10 @@ public enum DiffType { return this == ADDED; } + public boolean isRemoved() { + return this == REMOVED; + } + public boolean isNone() { return this == NONE; }