fix: diff response error

This commit is contained in:
vran 2022-05-27 09:58:39 +08:00
parent a3a8fd7154
commit 8ccd230c98
3 changed files with 37 additions and 10 deletions

View File

@ -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;
}
}
}

View File

@ -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));

View File

@ -11,6 +11,10 @@ public enum DiffType {
return this == ADDED;
}
public boolean isRemoved() {
return this == REMOVED;
}
public boolean isNone() {
return this == NONE;
}