fix: diff response error
This commit is contained in:
parent
a3a8fd7154
commit
8ccd230c98
|
@ -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<DatabaseDocumentSimpleResponse.TableData> 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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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));
|
||||
|
|
|
@ -11,6 +11,10 @@ public enum DiffType {
|
|||
return this == ADDED;
|
||||
}
|
||||
|
||||
public boolean isRemoved() {
|
||||
return this == REMOVED;
|
||||
}
|
||||
|
||||
public boolean isNone() {
|
||||
return this == NONE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue