|
@@ -8,8 +8,6 @@ import (
|
|
|
"context"
|
|
|
"encoding/json"
|
|
|
"fmt"
|
|
|
- "html"
|
|
|
- "regexp"
|
|
|
"time"
|
|
|
|
|
|
"github.com/sergi/go-diff/diffmatchpatch"
|
|
@@ -302,21 +300,39 @@ func diffUpdateData(oldObj any, newObj any) (*DiffUpdateData, error) {
|
|
|
|
|
|
dmp := diffmatchpatch.New()
|
|
|
diffs := dmp.DiffMain(string(oldObjByte), string(newObjByte), false)
|
|
|
+ fmt.Println(diffs)
|
|
|
+ if len(diffs) < 1 {
|
|
|
+ return &DiffUpdateData{}, nil
|
|
|
+ }
|
|
|
+
|
|
|
+ diffData := &DiffUpdateData{}
|
|
|
+ for _, diff := range diffs {
|
|
|
+ switch diff.Type {
|
|
|
+ case diffmatchpatch.DiffInsert:
|
|
|
+ diffData.Diff += fmt.Sprintf("<ins>%s</ins>", diff.Text)
|
|
|
+ case diffmatchpatch.DiffDelete:
|
|
|
+ diffData.Diff += fmt.Sprintf("<des>%s</des>", diff.Text)
|
|
|
+ case diffmatchpatch.DiffEqual:
|
|
|
+ diffData.Diff += diff.Text
|
|
|
+ }
|
|
|
+ }
|
|
|
+ diffData.Changes = []string{}
|
|
|
+
|
|
|
|
|
|
|
|
|
- diff := &DiffUpdateData{}
|
|
|
- if len(diffs) > 0 {
|
|
|
-
|
|
|
- htmlString := html.UnescapeString(dmp.DiffPrettyHtml(diffs))
|
|
|
- delInsRegex := regexp.MustCompile(`"([^"]+)":\s*"([^"]*(<del[^>]*>.*?</del>|<ins[^>]*>.*?</ins>)+[^"]*)",`)
|
|
|
- delInsMatches := delInsRegex.FindAllString(htmlString, -1)
|
|
|
- diff.Diff = htmlString
|
|
|
- diff.Changes = delInsMatches
|
|
|
- return diff, nil
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
- return &DiffUpdateData{}, err
|
|
|
+ return diffData, nil
|
|
|
}
|
|
|
|
|
|
func RepoUpdateSeDbDoc(ctx *RepoSession, db string, collectName string, idstr string, model interface{}) (*mongo.UpdateResult, error) {
|