github.com/kyma-incubator/compass/components/director@v0.0.0-20230623144113-d764f56ff805/pkg/graphql/api_validation.go (about)

     1  package graphql
     2  
     3  import (
     4  	validation "github.com/go-ozzo/ozzo-validation/v4"
     5  	"github.com/go-ozzo/ozzo-validation/v4/is"
     6  	"github.com/kyma-incubator/compass/components/director/pkg/inputvalidation"
     7  	"github.com/pkg/errors"
     8  )
     9  
    10  // Validate missing godoc
    11  func (i APIDefinitionInput) Validate() error {
    12  	return validation.ValidateStruct(&i,
    13  		validation.Field(&i.Name, validation.Required, is.PrintableASCII, validation.Length(1, appNameLengthLimit)),
    14  		validation.Field(&i.Description, validation.RuneLength(0, descriptionStringLengthLimit)),
    15  		validation.Field(&i.TargetURL, validation.Required, inputvalidation.IsURL, validation.RuneLength(1, longStringLengthLimit)),
    16  		validation.Field(&i.Group, validation.RuneLength(0, groupLengthLimit)),
    17  		validation.Field(&i.Spec, validation.NilOrNotEmpty),
    18  		validation.Field(&i.Version, validation.NilOrNotEmpty),
    19  	)
    20  }
    21  
    22  // Validate missing godoc
    23  func (i APISpecInput) Validate() error {
    24  	return validation.Errors{
    25  		"Rule.Type":                  validation.Validate(&i.Type, validation.Required, validation.In(APISpecTypeOdata, APISpecTypeOpenAPI)),
    26  		"Rule.Format":                validation.Validate(&i.Format, validation.Required, validation.In(SpecFormatYaml, SpecFormatJSON, SpecFormatXML)),
    27  		"Rule.MatchingTypeAndFormat": i.validateTypeWithMatchingSpecFormat(),
    28  		"Rule.FetchRequest":          validation.Validate(&i.FetchRequest),
    29  		"Rule.DataOrFetchRequest":    inputvalidation.ValidateExactlyOneNotNil("Only one of Data or Fetch Request must be passed", i.Data, i.FetchRequest),
    30  	}.Filter()
    31  }
    32  
    33  func (i APISpecInput) validateTypeWithMatchingSpecFormat() error {
    34  	switch i.Type {
    35  	case APISpecTypeOdata:
    36  		if !i.Format.isOneOf([]SpecFormat{SpecFormatXML, SpecFormatJSON}) {
    37  			return errors.Errorf("%s is not a valid spec format for spec type %s", i.Format, i.Type)
    38  		}
    39  	case APISpecTypeOpenAPI:
    40  		if !i.Format.isOneOf([]SpecFormat{SpecFormatJSON, SpecFormatYaml}) {
    41  			return errors.Errorf("%s is not a valid spec format for spec type %s", i.Format, i.Type)
    42  		}
    43  	default:
    44  		return errors.Errorf("%s is not a valid spec type", i.Type)
    45  	}
    46  	return nil
    47  }