mirror of
				https://github.com/vran-dev/databasir.git
				synced 2025-11-04 16:26:10 +08:00 
			
		
		
		
	@@ -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.converter.*;
 | 
				
			||||||
import com.databasir.core.domain.document.data.*;
 | 
					import com.databasir.core.domain.document.data.*;
 | 
				
			||||||
import com.databasir.core.domain.document.data.TableDocumentResponse.ForeignKeyDocumentResponse;
 | 
					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.event.DocumentUpdated;
 | 
				
			||||||
import com.databasir.core.domain.document.generator.DocumentFileGenerator;
 | 
					import com.databasir.core.domain.document.generator.DocumentFileGenerator;
 | 
				
			||||||
import com.databasir.core.domain.document.generator.DocumentFileGenerator.DocumentFileGenerateContext;
 | 
					import com.databasir.core.domain.document.generator.DocumentFileGenerator.DocumentFileGenerateContext;
 | 
				
			||||||
@@ -274,16 +275,7 @@ public class DocumentService {
 | 
				
			|||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                result.sort(Comparator.comparing(DatabaseDocumentSimpleResponse.TableData::getName));
 | 
					                result.sort(Comparator.comparing(DatabaseDocumentSimpleResponse.TableData::getName));
 | 
				
			||||||
                var notNoneDiffs = result.stream().filter(item -> !item.getDiffType().isNone());
 | 
					                DiffType diffType = DiffTypePredictor.predict(result);
 | 
				
			||||||
                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;
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return documentSimpleResponseConverter.of(document, result, diffType, projectName);
 | 
					                return documentSimpleResponseConverter.of(document, result, diffType, projectName);
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                tableMetas.sort(Comparator.comparing(DatabaseDocumentSimpleResponse.TableData::getName));
 | 
					                tableMetas.sort(Comparator.comparing(DatabaseDocumentSimpleResponse.TableData::getName));
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,10 @@ public enum DiffType {
 | 
				
			|||||||
        return this == ADDED;
 | 
					        return this == ADDED;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public boolean isRemoved() {
 | 
				
			||||||
 | 
					        return this == REMOVED;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isNone() {
 | 
					    public boolean isNone() {
 | 
				
			||||||
        return this == NONE;
 | 
					        return this == NONE;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user