package entity import ( "admin/apps/mockpro/internal/model" "admin/apps/mockpro/internal/model/dto" "reflect" ) var BanDtoFieldsDescInfo = DefaultBan().GetDtoFieldsDescInfo() type Ban struct { Id int po *model.Ban } func DefaultBan() *Ban { return &Ban{ po: &model.Ban{}, } } func FromBanPo(po *model.Ban) *Ban { return &Ban{ Id: po.ID, po: po, } } func FromBanDto(dto dto.CommonDtoValues) *Ban { et := DefaultBan() po := et.po //to := reflect.TypeOf(po) vo := reflect.ValueOf(po) for k, v := range dto { fo := vo.FieldByName(k) fo.Set(reflect.ValueOf(v)) } return et } func (et *Ban) ToPo() *model.Ban { return et.po } func (et *Ban) ToCommonDto() dto.CommonDtoValues { obj := make(dto.CommonDtoValues) to := reflect.TypeOf(et.po).Elem() vo := reflect.ValueOf(et.po).Elem() for i := 0; i < vo.NumField(); i++ { ft := to.Field(i) fo := vo.Field(i) obj[ft.Name] = fo.Interface() } return obj } func (et *Ban) GetDtoFieldsDescInfo() []*dto.CommonDtoFieldDesc { to := reflect.TypeOf(et.po).Elem() vo := reflect.ValueOf(et.po).Elem() obj := make([]*dto.CommonDtoFieldDesc, 0, to.NumField()) for i := 0; i < vo.NumField(); i++ { ft := to.Field(i) //fo := vo.Field(i) f1 := &dto.CommonDtoFieldDesc{ Name: ft.Name, Key: ft.Name, Type: ft.Type.Name(), HelpText: ft.Tag.Get("desc"), Editable: true, Require: true, Choices: make([]*dto.CommonDtoFieldChoice, 0), MultiChoice: false, } obj = append(obj, f1) } return obj }