fix more infinite recursion when registering models
This commit is contained in:
parent
e6a83d12e3
commit
cd72703068
32
registry.go
32
registry.go
@ -111,7 +111,7 @@ func makeRef(idx int, modelName string, fieldName string, ht reflect.Type) Refer
|
||||
panic("model name was empty")
|
||||
}
|
||||
|
||||
func parseTags(t reflect.Type, v reflect.Value, lastParsed string) (map[string][]InternalIndex, map[string]Reference, map[string]gridFSReference, string) {
|
||||
func parseTags(t reflect.Type, v reflect.Value, lastParsed string, eqCount int) (map[string][]InternalIndex, map[string]Reference, map[string]gridFSReference, string) {
|
||||
coll := ""
|
||||
refs := make(map[string]Reference)
|
||||
idcs := make(map[string][]InternalIndex)
|
||||
@ -130,9 +130,15 @@ func parseTags(t reflect.Type, v reflect.Value, lastParsed string) (map[string][
|
||||
switch ft.Kind() {
|
||||
case reflect.Slice:
|
||||
ft = ft.Elem()
|
||||
if _, ok := tags.Get("ref"); ok == nil && lastParsed != ft.String() {
|
||||
count := eqCount
|
||||
if lastParsed != ft.String() {
|
||||
count = 0
|
||||
} else {
|
||||
count = count + 1
|
||||
}
|
||||
if /*_, ok := tags.Get("ref"); ok != nil && */ count < 3 {
|
||||
if ft.Kind() == reflect.Struct {
|
||||
ii2, rr2, gg2, _ := parseTags(ft, reflect.New(ft).Elem(), ft.String())
|
||||
ii2, rr2, gg2, _ := parseTags(ft, reflect.New(ft).Elem(), ft.String(), count)
|
||||
for k, vv := range ii2 {
|
||||
idcs[sft.Name+"."+k] = vv
|
||||
}
|
||||
@ -285,7 +291,7 @@ func (r TModelRegistry) Model(mdl ...any) {
|
||||
if idx < 0 {
|
||||
panic("A model must embed the Document struct!")
|
||||
}
|
||||
inds, refs, gfs, coll := parseTags(t, v, "")
|
||||
inds, refs, gfs, coll := parseTags(t, v, "", 0)
|
||||
if coll == "" {
|
||||
panic(fmt.Sprintf("a Document needs to be given a collection name! (passed type: %s)", n))
|
||||
}
|
||||
@ -342,7 +348,23 @@ func innerWatch(coll *mongo.Collection) {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
var uid = data["documentKey"].(bson.M)["_id"]
|
||||
var uid any
|
||||
|
||||
docKey := data["documentKey"]
|
||||
|
||||
switch docKey.(type) {
|
||||
case bson.M:
|
||||
uid = docKey.(bson.M)["_id"]
|
||||
case bson.D:
|
||||
for _, vv := range docKey.(bson.D) {
|
||||
if vv.Key == "_id" {
|
||||
uid = vv.Value
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//var uid = data["documentKey"].(bson.M)["_id"]
|
||||
|
||||
if data["operationType"] == "insert" {
|
||||
counterColl := DB.Collection(COUNTER_COL)
|
||||
|
Loading…
x
Reference in New Issue
Block a user