-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncs.go
122 lines (109 loc) · 2.5 KB
/
funcs.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package mongoutils
import (
"go.mongodb.org/mongo-driver/bson/primitive"
)
// Array generate primitive.A
func Array(args ...any) primitive.A {
return args
}
// Map generate primitive.M
//
// Args count must even
func Map(args ...any) primitive.M {
if len(args)%2 == 0 {
res := make(primitive.M, len(args)/2)
for i := 0; i < len(args); i++ {
if i%2 == 0 {
if k, ok := args[i].(string); ok {
res[k] = args[i+1]
}
}
}
return res
}
return primitive.M{}
}
// Maps generate []primitive.M
//
// Args count must even
func Maps(args ...any) []primitive.M {
res := make([]primitive.M, 0)
if len(args)%2 == 0 {
for i := 0; i < len(args); i++ {
if i%2 == 0 {
if k, ok := args[i].(string); ok {
res = append(res, primitive.M{k: args[i+1]})
}
}
}
}
return res
}
// Doc generate primitive.D from args
//
// Args count must even
// Example: Doc("_id", 1, "name", "John")
func Doc(args ...any) primitive.D {
res := make([]primitive.E, 0)
if len(args)%2 == 0 {
for i := 0; i < len(args); i++ {
if i%2 == 0 {
if k, ok := args[i].(string); ok {
res = append(res, primitive.E{Key: k, Value: args[i+1]})
}
}
}
}
return res
}
// Regex generate Regex
//
// { pattern: "John.*", options: "i" }
func Regex(pattern string, opt string) primitive.Regex {
return primitive.Regex{Pattern: pattern, Options: opt}
}
// RegexFor generate map with regex parameter
//
// { "name": { pattern: "John.*", options: "i" } }
func RegexFor(k string, pattern string, opt string) primitive.M {
return primitive.M{k: Regex(pattern, opt)}
}
// In generate $in map
//
// {k: {$in: v}}
func In(k string, v ...any) primitive.M {
return primitive.M{k: primitive.M{"$in": v}}
}
// Set generate simple set map
//
// {$set: v}
func Set(v any) primitive.M {
return primitive.M{"$set": v}
}
// SetNested generate nested set map
//
// {$set: {k: v}}
func SetNested(k string, v any) primitive.M {
return primitive.M{"$set": primitive.M{k: v}}
}
// Match generate nested set map
//
// {$match: v}
func Match(v any) primitive.M {
return primitive.M{"$match": v}
}
// FillBackupFields fill backup related fields of backup model
func FillBackupFields(model any) bool {
if cs, backup := modelChecksum(model); cs != "" {
backup.SetChecksum(cs)
backup.UnMarkBackup()
return true
}
return false
}
// ModelHasChanged check if backup model fields changed
func ModelHasChanged(old any, model any) bool {
oldCs, _ := modelChecksum(old)
newCs, _ := modelChecksum(model)
return newCs != "" && newCs != oldCs
}