package role import ( "ginCms/models" "reflect" ) // EditEnabledQueryReq 更新enabled的请求消息 // 将全部的Enabled字段,设置为相同的值 type EditEnabledQueryReq struct { IDList []uint `form:"id" binding:"gt=0"` } type EditEnabledBodyReq struct { Enabled bool `json:"enabled"` } // 提供id和enabled的映射,将某个id的enabled设置为某个值 //type EditEnabledBodyReq struct { // Enabled map[uint]bool `json:"enabled"` //} // EditUriReq URI上的id参数 type EditUriReq struct { ID uint `uri:"id" binding:"required,gt=0"` // 可以考虑加一个id存在的校验 } // EditBodyReq 更新主体参数 type EditBodyReq struct { Title *string `json:"title" field:"title"` Key *string `json:"key" field:"key"` Enabled *bool `json:"enabled" field:"enabled"` Weight *int `json:"weight" field:"weight"` Comment *string `json:"comment" field:"comment"` } func (req EditBodyReq) ToFieldMap() models.FieldMap { // 1. 初始化map m := models.FieldMap{} // 2. 利用反射来遍历req结构的全部字段 reqType := reflect.TypeOf(req) reqValue := reflect.ValueOf(req) // 通过字段数量,进行遍历 for i, nums := 0, reqType.NumField(); i < nums; i++ { // 获取 field tag fieldTag := reqType.Field(i).Tag.Get("field") // 存在 field tag才自动处理 if fieldTag == "" { continue } // 判断字段是否为nil,这个值的判断 if !reqValue.Field(i).IsNil() { if fieldTag == "some_field" { // 考虑特殊字段的处理情况 } else { // 放入map m[fieldTag] = reqValue.Field(i).Elem().Interface() } } } return m } // RestoreReq 还原的请求消息 type RestoreReq struct { IDList []uint `form:"id" binding:"gt=0"` } // DeleteReq 删除的请求消息 type DeleteReq struct { IDList []uint `form:"id" binding:"gt=0"` Force bool `form:"force" binding:""` } // 添加请求消息 type AddReq struct { models.Role // 需要额外校验的字段 Title string `json:"title" binding:"required"` Key string `json:"key" binding:"required"` } // AddReq to Role func (req AddReq) ToRole() *models.Role { row := req.Role row.Title = req.Title row.Key = req.Key return &row } // GetRowReq GetRow接口的请求消息类型 type GetRowReq struct { // required, 必须的 // gt, 数值 > 0 ID uint `form:"id" binding:"required,gt=0"` } // GetListReq GetList请求参数类型 type GetListReq struct { // 过滤 models.RoleFilter // 排序 models.Sorter // 翻页 models.Pager } // Clean 查询列表参数清理 func (req *GetListReq) Clean() { req.RoleFilter.Clean() req.Sorter.Clean() req.Pager.Clean() }