56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package mongo
|
|
|
|
import (
|
|
"log"
|
|
"fmt"
|
|
"context"
|
|
|
|
"go.mongodb.org/mongo-driver/v2/bson"
|
|
)
|
|
|
|
func (c *MongoClient) DiscriminatorCheckAndApplyToData(ctx context.Context, name string, data map[string]any) error {
|
|
cdef, ok := c.Registry[name]
|
|
if ok && cdef.Discriminator != nil {
|
|
if data == nil {
|
|
data = map[string]any{}
|
|
}
|
|
|
|
log.Printf("Discriminator found for %s; will use it", name)
|
|
|
|
// get from context
|
|
vAny := ctx.Value(cdef.Discriminator.CtxField)
|
|
if vAny == nil {
|
|
return fmt.Errorf("discriminator field required for %s", name)
|
|
}
|
|
|
|
// update payload
|
|
v := vAny.(string)
|
|
data[cdef.Discriminator.Field] = v
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (c *MongoClient) DiscriminatorCheckAndApplyToFilter(ctx context.Context, name string, filter bson.M) error {
|
|
cdef, ok := c.Registry[name]
|
|
if ok && cdef.Discriminator != nil {
|
|
if filter == nil {
|
|
filter = bson.M{}
|
|
}
|
|
|
|
log.Printf("Discriminator found for %s; will use it", name)
|
|
|
|
// get from context
|
|
vAny := ctx.Value(cdef.Discriminator.CtxField)
|
|
if vAny == nil {
|
|
return fmt.Errorf("discriminator field required for %s", name)
|
|
}
|
|
|
|
// update payload
|
|
v := vAny.(string)
|
|
filter[cdef.Discriminator.Field] = bson.M{"$eq": v}
|
|
}
|
|
|
|
return nil
|
|
}
|