Files
mongo/discrimination.go
2026-04-17 11:38:12 -04:00

48 lines
1.1 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 {
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 {
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
}