| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | 
							- package ii
 
- import (
 
- 	"fmt"
 
- 	"regexp"
 
- 	"strings"
 
- 	"golib/features/mo"
 
- )
 
- func (c *ItemInfo) init() error {
 
- 	if err := c.initEnums(); err != nil {
 
- 		return err
 
- 	}
 
- 	if err := c.initValue(); err != nil {
 
- 		return err
 
- 	}
 
- 	if err := c.initPattern(); err != nil {
 
- 		return err
 
- 	}
 
- 	c.initMap()
 
- 	return c.initFieldMap()
 
- }
 
- // initFieldMap 创建字段索引
 
- func (c *ItemInfo) initFieldMap() error {
 
- 	c.FieldMap = make(map[string]int)
 
- 	for i, field := range c.Fields {
 
- 		if !isEnabledType(field.Type) {
 
- 			return fmt.Errorf("%s: unenabled type: %s", c.Name, field.Type.String())
 
- 		}
 
- 		if field.HasLookup() && field.Lookup.AS == field.Name {
 
- 			return fmt.Errorf("%s: duplicate names are not allowed: Field.Name: %s, Lookup.AS: %s", c.Name, field.Name, field.Lookup.AS)
 
- 		}
 
- 		c.FieldMap[field.Name] = i
 
- 	}
 
- 	return nil
 
- }
 
- // initEnums 初始化枚举类型值
 
- func (c *ItemInfo) initEnums() error {
 
- 	for i, field := range c.Fields {
 
- 		length := len(field.Enums)
 
- 		enum := make([]any, length)
 
- 		for j := 0; j < length; j++ {
 
- 			val, err := field.Convert(field.Enums[j])
 
- 			if err != nil {
 
- 				return fmt.Errorf("%s.%s: initEnums: %s", c.Name, field.Name, err)
 
- 			}
 
- 			enum[j] = val
 
- 		}
 
- 		c.Fields[i].enums = enum
 
- 	}
 
- 	return nil
 
- }
 
- // initValue 初始化默认值类型
 
- func (c *ItemInfo) initValue() error {
 
- 	for i, field := range c.Fields {
 
- 		// array 和 object 无需解析默认值
 
- 		if strings.TrimSpace(field.Default) == "" || field.Type == mo.TypeArray || field.Type == mo.TypeObject {
 
- 			c.Fields[i].defaultValue = field.Type.Default()
 
- 			continue
 
- 		}
 
- 		val, err := field.Convert(field.Default)
 
- 		if err != nil {
 
- 			return fmt.Errorf("%s.%s: initValue: %s", c.Name, field.Name, err)
 
- 		}
 
- 		c.Fields[i].defaultValue = val
 
- 	}
 
- 	return nil
 
- }
 
- func (c *ItemInfo) initPattern() error {
 
- 	for i, field := range c.Fields {
 
- 		if field.Pattern != "" {
 
- 			regex, err := regexp.Compile(field.Pattern)
 
- 			if err != nil {
 
- 				return fmt.Errorf("%s.%s: initPattern: %s", c.Name, field.Name, err)
 
- 			}
 
- 			c.Fields[i].pattern = regex
 
- 		}
 
- 	}
 
- 	return nil
 
- }
 
- // initMap 初始化必填和唯一
 
- func (c *ItemInfo) initMap() {
 
- 	c.RequiredMap = make(map[string]int)
 
- 	c.UniqueMap = make(map[string]int)
 
- 	for idx, field := range c.Fields {
 
- 		if field.Required {
 
- 			c.RequiredMap[field.Name] = idx
 
- 		}
 
- 		if field.Unique {
 
- 			c.UniqueMap[field.Name] = idx
 
- 		}
 
- 	}
 
- }
 
 
  |