mirror of
https://github.com/Warky-Devs/ResolveSpec.git
synced 2025-09-13 17:01:30 +00:00
72 lines
2.4 KiB
Go
72 lines
2.4 KiB
Go
package resolvespec
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/Warky-Devs/ResolveSpec/pkg/models"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// NewAPIHandler creates a new APIHandler instance (backward compatibility)
|
|
// For now, this returns the legacy APIHandler to maintain full compatibility
|
|
// including preloading functionality. Users can opt-in to new abstractions when ready.
|
|
func NewAPIHandler(db *gorm.DB) *APIHandlerCompat {
|
|
legacyHandler := NewLegacyAPIHandler(db)
|
|
|
|
// Initialize new abstractions for future use
|
|
gormAdapter := NewGormAdapter(db)
|
|
registry := NewModelRegistry()
|
|
|
|
// Initialize registry with existing models
|
|
models.IterateModels(func(name string, model interface{}) {
|
|
registry.RegisterModel(name, model)
|
|
})
|
|
|
|
newHandler := NewHandler(gormAdapter, registry)
|
|
|
|
return &APIHandlerCompat{
|
|
legacyHandler: legacyHandler,
|
|
newHandler: newHandler,
|
|
db: db,
|
|
}
|
|
}
|
|
|
|
// APIHandlerCompat provides backward compatibility with the original APIHandler
|
|
type APIHandlerCompat struct {
|
|
legacyHandler *LegacyAPIHandler // For full backward compatibility
|
|
newHandler *Handler // New abstracted handler (optional use)
|
|
db *gorm.DB // Legacy GORM reference
|
|
}
|
|
|
|
// Handle maintains the original signature for backward compatibility
|
|
func (a *APIHandlerCompat) Handle(w http.ResponseWriter, r *http.Request, params map[string]string) {
|
|
// Use legacy handler to maintain full compatibility including preloading
|
|
a.legacyHandler.Handle(w, r, params)
|
|
}
|
|
|
|
// HandleGet maintains the original signature for backward compatibility
|
|
func (a *APIHandlerCompat) HandleGet(w http.ResponseWriter, r *http.Request, params map[string]string) {
|
|
// Use legacy handler for metadata
|
|
a.legacyHandler.HandleGet(w, r, params)
|
|
}
|
|
|
|
// RegisterModel maintains the original signature for backward compatibility
|
|
func (a *APIHandlerCompat) RegisterModel(schema, name string, model interface{}) error {
|
|
// Register with both legacy handler and new handler
|
|
err1 := a.legacyHandler.RegisterModel(schema, name, model)
|
|
err2 := a.newHandler.RegisterModel(schema, name, model)
|
|
if err1 != nil {
|
|
return err1
|
|
}
|
|
return err2
|
|
}
|
|
|
|
// GetNewHandler returns the new abstracted handler for advanced use cases
|
|
func (a *APIHandlerCompat) GetNewHandler() *Handler {
|
|
return a.newHandler
|
|
}
|
|
|
|
// GetLegacyHandler returns the legacy handler for cases needing full GORM features
|
|
func (a *APIHandlerCompat) GetLegacyHandler() *LegacyAPIHandler {
|
|
return a.legacyHandler
|
|
} |