55 lines
1.2 KiB
Go
55 lines
1.2 KiB
Go
package models
|
|
|
|
import "reflect"
|
|
|
|
type FieldMapper interface {
|
|
GetFields() interface{}
|
|
}
|
|
|
|
func (c *CreatingDealReq) GetFields() interface{} {
|
|
return c.Fields
|
|
}
|
|
|
|
func (c *CompanyReq) GetFields() interface{} {
|
|
return c.Fields
|
|
}
|
|
|
|
func (c *CreateContactReq) GetFields() interface{} {
|
|
return c.Fields
|
|
}
|
|
|
|
func (c *CreatingLeadReq) GetFields() interface{} {
|
|
return c.Fields
|
|
}
|
|
|
|
func FormattingToMap(f FieldMapper, fieldAnswer map[string]string) map[string]map[string]interface{} {
|
|
resultFields := make(map[string]interface{})
|
|
result := make(map[string]map[string]interface{})
|
|
|
|
fields := reflect.ValueOf(f.GetFields())
|
|
fieldType := reflect.TypeOf(f.GetFields())
|
|
|
|
for i := 0; i < fields.NumField(); i++ {
|
|
field := fields.Field(i)
|
|
fieldName := fieldType.Field(i).Tag.Get("json")
|
|
|
|
switch field.Kind() {
|
|
case reflect.String:
|
|
resultFields[fieldName] = field.String()
|
|
case reflect.Int32, reflect.Int:
|
|
resultFields[fieldName] = field.Int()
|
|
case reflect.Slice:
|
|
if field.Type().Elem().Kind() == reflect.Int32 {
|
|
resultFields[fieldName] = field.Interface().([]int32)
|
|
}
|
|
}
|
|
}
|
|
|
|
for key, value := range fieldAnswer {
|
|
resultFields[key] = value
|
|
}
|
|
result["fields"] = resultFields
|
|
|
|
return result
|
|
}
|