package graphql import ( "errors" "fmt" "strings" "tercul/internal/domain" "github.com/go-playground/validator/v10" ) // The 'validate' variable is declared in binding.go and is used here. // Validate performs validation on a struct using the validator library. func Validate(s interface{}) error { err := validate.Struct(s) if err == nil { return nil } var validationErrors validator.ValidationErrors if errors.As(err, &validationErrors) { var errorMessages []string for _, err := range validationErrors { // Customize error messages here if needed. errorMessages = append(errorMessages, fmt.Sprintf("field '%s' failed on the '%s' tag", err.Field(), err.Tag())) } return fmt.Errorf("%w: %s", domain.ErrValidation, strings.Join(errorMessages, "; ")) } // For other unexpected errors, like invalid validation input. return fmt.Errorf("unexpected error during validation: %w", err) }