package validation import ( "context" "fmt" "meteor-compute-service/internal/models" ) // ValidationProvider defines the pluggable interface for event validation algorithms type ValidationProvider interface { // Validate performs validation on a raw event and returns a validation result Validate(ctx context.Context, rawEvent *models.RawEvent) (*models.ValidationResult, error) // GetProviderInfo returns metadata about this validation provider GetProviderInfo() ProviderInfo } // ProviderInfo contains metadata about a validation provider type ProviderInfo struct { Name string `json:"name"` Version string `json:"version"` Description string `json:"description"` Algorithm string `json:"algorithm"` } // ProviderType represents the available validation provider types type ProviderType string const ( ProviderTypeMVP ProviderType = "mvp" ProviderTypeClassicCV ProviderType = "classic_cv" ) // ProviderFactory creates validation providers based on configuration type ProviderFactory struct{} // NewProviderFactory creates a new provider factory instance func NewProviderFactory() *ProviderFactory { return &ProviderFactory{} } // CreateProvider creates a validation provider based on the specified type func (f *ProviderFactory) CreateProvider(providerType ProviderType) (ValidationProvider, error) { switch providerType { case ProviderTypeMVP: return NewMVPValidationProvider(), nil case ProviderTypeClassicCV: return NewClassicCvProvider(), nil default: return nil, fmt.Errorf("unknown validation provider type: %s", providerType) } } // GetAvailableProviders returns a list of all available provider types func (f *ProviderFactory) GetAvailableProviders() []ProviderType { return []ProviderType{ ProviderTypeMVP, ProviderTypeClassicCV, } }