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 }