package graphql import ( "errors" "fmt" "strings" "tercul/internal/adapters/graphql/model" "github.com/asaskevich/govalidator" ) var ErrValidation = errors.New("validation failed") func validateWorkInput(input model.WorkInput) error { name := strings.TrimSpace(input.Name) if len(name) < 3 { return fmt.Errorf("name must be at least 3 characters long") } if !govalidator.Matches(name, `^[a-zA-Z0-9\s]+$`) { return fmt.Errorf("name can only contain letters, numbers, and spaces") } if len(input.Language) != 2 { return fmt.Errorf("language must be a 2-character code") } return nil } func validateAuthorInput(input model.AuthorInput) error { name := strings.TrimSpace(input.Name) if len(name) < 3 { return fmt.Errorf("name must be at least 3 characters long") } if !govalidator.Matches(name, `^[a-zA-Z0-9\s]+$`) { return fmt.Errorf("name can only contain letters, numbers, and spaces") } if len(input.Language) != 2 { return fmt.Errorf("language must be a 2-character code") } return nil } func validateTranslationInput(input model.TranslationInput) error { name := strings.TrimSpace(input.Name) if len(name) < 3 { return fmt.Errorf("name must be at least 3 characters long") } if !govalidator.Matches(name, `^[a-zA-Z0-9\s]+$`) { return fmt.Errorf("name can only contain letters, numbers, and spaces") } if len(input.Language) != 2 { return fmt.Errorf("language must be a 2-character code") } if input.WorkID == "" { return fmt.Errorf("workId is required") } return nil }