visitModelValidate()

in lib/generator.js [1089:1147]


  visitModelValidate(ast, level) {
    let notPass = false;
    for (let i = 0; i < ast.nodes.length; i++) {
      const node = ast.nodes[i];
      const pattern = this.getAttributes(node, 'pattern') || '';
      const maxLength = this.getAttributes(node, 'maxLength') || 0;
      const minLength = this.getAttributes(node, 'minLength') || 0;
      const maximum = this.getAttributes(node, 'maximum') || 0;
      const minimum = this.getAttributes(node, 'minimum') || 0;
      let comments = DSL.comment.getFrontComments(this.comments, node.tokenRange[0]);
      this.visitComments(comments, level);
      let param = _avoidKeywords(_snakeCase(_escape(_name(node.fieldName))));
      // 这里判断类中属性是否是必填
      if (node.required) {
        notPass = true;
        this.emit(`self.validate_required(self.${param}, '${param}')\n`, level + 2);   
      }
      // 这里判断类中属性的结构
      if(node.fieldValue.fieldType === 'array' || node.fieldValue.fieldType === 'map' || 
        node.fieldValue.type === 'array' || node.fieldValue.type === 'map'
      ) {
        // 下面不包含model的就不需要validate
        if(!this.checkFieldHasModel(node.fieldValue)){
          continue;
        }
        notPass = true;
        this.emit(`if self.${param}:\n`, level + 2);
        this.visitFieldValidate(node.fieldValue, param, `self.${param}`, level + 4);
      } else if(node.fieldValue.fieldType && node.fieldValue.fieldType.idType === 'model' || node.fieldValue.type === 'modelBody'){
        notPass = true;
        this.emit(`if self.${param}:\n`, level + 2);
        this.emit(`self.${param}.validate()\n`, level + 4);
      } else if(pattern !== ''){
        notPass = true;
        this.emit(`if self.${param} is not None:\n`, level + 2);
        this.emit(`self.validate_pattern(self.${param}, '${param}', '${pattern}')\n`, level + 4);
      } else if(maxLength > 0 && maxLength <= 2147483647){
        notPass = true;
        this.emit(`if self.${param} is not None:\n`, level + 2);
        this.emit(`self.validate_max_length(self.${param}, '${param}', ${maxLength})\n`, level + 4);
      } else if(minLength > 0 && minLength <= 2147483647){
        notPass = true;
        this.emit(`if self.${param} is not None:\n`, level + 2);
        this.emit(`self.validate_min_length(self.${param}, '${param}', ${minLength})\n`, level + 4);
      } else if(maximum > 0 && maximum <= Number.MAX_SAFE_INTEGER){
        notPass = true;
        this.emit(`if self.${param} is not None:\n`, level + 2);
        this.emit(`self.validate_maximum(self.${param}, '${param}', ${maximum})\n`, level + 4);
      } else if(minimum > 0 && minimum <= Number.MAX_SAFE_INTEGER){
        notPass = true;
        this.emit(`if self.${param} is not None:\n`, level + 2);
        this.emit(`self.validate_minimum(self.${param}, '${param}', ${minimum})\n`, level + 4);
      }
    }

    if(!notPass) {
      this.emit('pass\n', level + 2);
    }
  }