Skip to content

更新用户 原创

1、新增数据 Update 方法

在 models/user.go 中增加下面方法:

go
// Update 更新数据
func (u *User) Update(db *gorm.DB, values interface{}) error {
	// 如果用户存在并未被删除,则更新
	if err := db.Model(u).Where("id = ? AND is_del = ?", u.ID, 0).First(&User{}).Updates(values).Error; err != nil {
		return err
	}
	return nil
}

2、增加 dao 方法

go
// UserUpdate 更新用户
func (d *Dao) UserUpdate(id uint32, name, password string) error {
	nowTime := uint32(time.Now().Unix())
	user := models.User{
		Base: &models.Base{
			ID: id,
		},
	}

	values := map[string]interface{}{
		"username":    name,
		"password":    password,
		"modified_at": nowTime,
	}

	return user.Update(d.engine, values)
}

3、增加 services 方法

go
// UserUpdate 更新用户
func (s *Services) UserUpdate(param *requests.UserUpdateRequest) error {
	return s.dao.UserUpdate(param.ID, param.Username, param.Password)
}

这里需要创建requests.UserUpdateRequest的结构体。

在 requests 包中创建user.go,写入以下内容:

go
type UserUpdateRequest struct {
	ID       uint32 `json:"id" form:"id" valid:"id"`
	Username string `json:"username" form:"username" valid:"username"`
	Password string `json:"password" form:"password" valid:"password"`
}

func ValidUserUpdateRequest(data interface{}, ctx *gin.Context) map[string][]string {
	rules := govalidator.MapData{
		"username": []string{"required", "not_exists:user,username"},
		"password": []string{"required", "min:6"},
		"id":       []string{"required"},
	}
	messages := govalidator.MapData{
		"username": []string{
			"required: 用户名为必填字段,字段为 username",
		},
		"password": []string{
			"required: 密码为必填字段,字段为 password",
			"min:密码长度需大于 6",
		},
		"id": []string{
			"required: 用户ID是必填项, 字段为 id",
		},
	}

	// 校验入参
	errs := app.ValidateOptions(data, rules, messages)

	return errs
}

4、增加 controllers 方法

在 controllers/api/v1/user.go 中新增删除用户方法,如下:

go
// @Summary 更新用户
// @Description 更新用户
// @Tags 用户管理
// @Produce json
// @Param body body requests.UserUpdateRequest true "body"
// @Success 200 {object} string "成功"
// @Failure 400 {object} errorcode.Error "请求错误"
// @Failure 500 {object} errorcode.Error "内部错误"
// @Router /api/v1/user/update [post]
func (u *UserController) Update(ctx *gin.Context) {
	param := requests.UserUpdateRequest{}
	response := app.NewResponse(ctx)

	if ok := app.Validate(ctx, &param, requests.ValidUserUpdateRequest); !ok {
		return
	}

	svc := services.New(ctx)
	if err := svc.UserUpdate(&param); err != nil {
		global.Log.Error("更新用户失败", zap.String("error", err.Error()))
		response.ToErrorResponse(errorcode.ErrorUserUpdateFail)
		return
	}

	response.ToResponse(gin.H{
		"msg": "更新用户成功",
	})
}

增加路由

在 routers 包中增加删除用户路由,如下:

go
package routers

import (
	"github.com/gin-gonic/gin"
	v1 "github.com/joker-bai/hawkeye/internal/app/controllers/api/v1"
)

type UserRouter struct{}

func (u *UserRouter) Inject(r *gin.RouterGroup) {
	uc := new(v1.UserController)
	r.POST("/user/create", uc.Create)
	r.POST("/user/delete", uc.Delete)
	r.POST("/user/update", uc.Update)
}

测试

启动服务,使用 apifox 进行测试。

695056b86a1c90e83a0dfb92c4d7a85e MD5

发送请求,更新用户成功。

76f6d4d111619399c40765594ecf0cc6 MD5

数据库里记录信息。

更新之前:

8e0b5e1605e25c06333cf298672fa458 MD5

更新之后:

7d063ea69abfcef8dd1d34ef50870bcd MD5

生成接口文档并增加代码版本

go
$ swag.exe init
$ git add .
$ git commit -m "新增用户更新模块"
最近更新