package role import ( "github.com/veypi/vbase/cfg" "github.com/veypi/vbase/models" "github.com/veypi/vigo" ) type updateOpts struct { RoleID string `src:"path@role_id" desc:"角色ID"` // 角色 ID Name *string `json:"name" src:"json" desc:"角色名称"` // 可选,角色名称 Des *string `json:"des" src:"json" desc:"角色描述"` // 可选,角色描述 } var _ = Router.Patch("/{role_id}", "更新角色", updateRole) func updateRole(x *vigo.X, opts *updateOpts) (*models.Role, error) { // 查找角色 role := &models.Role{} if err := cfg.DB().Where("id = ?", opts.RoleID).First(role).Error; err != nil { return nil, vigo.NewError("role not found").WithCode(404) } // 准备更新字段 updates := map[string]interface{}{} if opts.Name != nil { updates["name"] = *opts.Name } if opts.Des != nil { updates["des"] = *opts.Des } // 如果没有更新字段,直接返回 if len(updates) == 0 { return role, nil } // 执行更新 if err := cfg.DB().Model(role).Updates(updates).Error; err != nil { return nil, err } // 重新查询以获取最新数据 if err := cfg.DB().Where("id = ?", opts.RoleID).First(role).Error; err != nil { return nil, err } return role, nil }