mirror of
https://github.com/vran-dev/databasir.git
synced 2025-08-11 16:28:39 +08:00
fix: diff response error
This commit is contained in:
@@ -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));
|
||||
|
Reference in New Issue
Block a user