ResolveSpec/pkg/resolvespec/compatibility.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
}