diff --git a/pkg/models/registry.go b/pkg/models/registry.go index 4fa4042..67927c6 100644 --- a/pkg/models/registry.go +++ b/pkg/models/registry.go @@ -16,7 +16,7 @@ var ( // RegisterModel registers a model type with the registry // The model must be a struct or a pointer to a struct // e.g RegisterModel(&ModelPublicUser{},"public.user") -func RegisterModel(model interface{}, name string) { +func RegisterModel(model interface{}, name string) error { modelRegistryMutex.Lock() defer modelRegistryMutex.Unlock() @@ -28,6 +28,7 @@ func RegisterModel(model interface{}, name string) { name = modelType.Name() } modelRegistry[name] = model + return nil } // RegisterFunction register a function with the registry diff --git a/pkg/resolvespec/utils.go b/pkg/resolvespec/utils.go index 9d05680..b595e66 100644 --- a/pkg/resolvespec/utils.go +++ b/pkg/resolvespec/utils.go @@ -65,3 +65,14 @@ func (h *APIHandler) getModelForEntity(schema, name string) (interface{}, error) } return model, err } + +func (h *APIHandler) RegisterModel(schema, name string, model interface{}) error { + fullname := fmt.Sprintf("%s.%s", schema, name) + model, err := models.GetModelByName(fullname) + if model != nil && err != nil { + return fmt.Errorf("model %s already exists", fullname) + } + err = models.RegisterModel(model, fullname) + + return err +}