package dbhandler import ( "fmt" "sync" "git.acooldomain.co/server-manager/backend-kubernetes-go/db_handler/mongo" "git.acooldomain.co/server-manager/backend-kubernetes-go/dbhandler" "git.acooldomain.co/server-manager/backend-kubernetes-go/models" ) var ( mu sync.Mutex existingServerAuthHandlers = make(map[string]dbhandler.ServersAuthorizationDbHandler) ) func configToKey(config any) (string, error) { switch c := config.(type) { case models.MongoDBConfig: return fmt.Sprintf("mongo:%s:%s:%s:%s:%s", c.Url, c.Database, c.Collection, c.Username, c.Password), nil default: return "", fmt.Errorf("unknown config format") } } func GetServersAuthDbHandler(config any) (dbhandler.ServersAuthorizationDbHandler, error) { mu.Lock() defer mu.Unlock() key, err := configToKey(config) if handler, exists := existingServerAuthHandlers[key]; err != nil && exists { return handler, nil } switch c := config.(type) { case models.MongoDBConfig: handler, err := mongo.NewServersAuthorizationHandler(c) return handler, err } return nil, fmt.Errorf("Unknown config format") }