mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-31 00:34:25 +00:00
Massive refactor and introduction of restheadspec
This commit is contained in:
104
pkg/modelregistry/model_registry.go
Normal file
104
pkg/modelregistry/model_registry.go
Normal file
@@ -0,0 +1,104 @@
|
||||
package modelregistry
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// DefaultModelRegistry implements ModelRegistry interface
|
||||
type DefaultModelRegistry struct {
|
||||
models map[string]interface{}
|
||||
mutex sync.RWMutex
|
||||
}
|
||||
|
||||
// Global default registry instance
|
||||
var defaultRegistry = &DefaultModelRegistry{
|
||||
models: make(map[string]interface{}),
|
||||
}
|
||||
|
||||
// NewModelRegistry creates a new model registry
|
||||
func NewModelRegistry() *DefaultModelRegistry {
|
||||
return &DefaultModelRegistry{
|
||||
models: make(map[string]interface{}),
|
||||
}
|
||||
}
|
||||
|
||||
func (r *DefaultModelRegistry) RegisterModel(name string, model interface{}) error {
|
||||
r.mutex.Lock()
|
||||
defer r.mutex.Unlock()
|
||||
|
||||
if _, exists := r.models[name]; exists {
|
||||
return fmt.Errorf("model %s already registered", name)
|
||||
}
|
||||
|
||||
r.models[name] = model
|
||||
return nil
|
||||
}
|
||||
|
||||
func (r *DefaultModelRegistry) GetModel(name string) (interface{}, error) {
|
||||
r.mutex.RLock()
|
||||
defer r.mutex.RUnlock()
|
||||
|
||||
model, exists := r.models[name]
|
||||
if !exists {
|
||||
return nil, fmt.Errorf("model %s not found", name)
|
||||
}
|
||||
|
||||
return model, nil
|
||||
}
|
||||
|
||||
func (r *DefaultModelRegistry) GetAllModels() map[string]interface{} {
|
||||
r.mutex.RLock()
|
||||
defer r.mutex.RUnlock()
|
||||
|
||||
result := make(map[string]interface{})
|
||||
for k, v := range r.models {
|
||||
result[k] = v
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func (r *DefaultModelRegistry) GetModelByEntity(schema, entity string) (interface{}, error) {
|
||||
// Try full name first
|
||||
fullName := fmt.Sprintf("%s.%s", schema, entity)
|
||||
if model, err := r.GetModel(fullName); err == nil {
|
||||
return model, nil
|
||||
}
|
||||
|
||||
// Fallback to entity name only
|
||||
return r.GetModel(entity)
|
||||
}
|
||||
|
||||
// Global convenience functions using the default registry
|
||||
|
||||
// RegisterModel registers a model with the default global registry
|
||||
func RegisterModel(model interface{}, name string) error {
|
||||
return defaultRegistry.RegisterModel(name, model)
|
||||
}
|
||||
|
||||
// GetModelByName retrieves a model from the default global registry by name
|
||||
func GetModelByName(name string) (interface{}, error) {
|
||||
return defaultRegistry.GetModel(name)
|
||||
}
|
||||
|
||||
// IterateModels iterates over all models in the default global registry
|
||||
func IterateModels(fn func(name string, model interface{})) {
|
||||
defaultRegistry.mutex.RLock()
|
||||
defer defaultRegistry.mutex.RUnlock()
|
||||
|
||||
for name, model := range defaultRegistry.models {
|
||||
fn(name, model)
|
||||
}
|
||||
}
|
||||
|
||||
// GetModels returns a list of all models in the default global registry
|
||||
func GetModels() []interface{} {
|
||||
defaultRegistry.mutex.RLock()
|
||||
defer defaultRegistry.mutex.RUnlock()
|
||||
|
||||
models := make([]interface{}, 0, len(defaultRegistry.models))
|
||||
for _, model := range defaultRegistry.models {
|
||||
models = append(models, model)
|
||||
}
|
||||
return models
|
||||
}
|
||||
Reference in New Issue
Block a user