Skip to content

删除用户 原创

1、新增数据 Delete 方法

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

go
// Delete 删除用户
func (u *User) Delete(db *gorm.DB) error {
	// 先判断用户是否被删除
	var user User
	if err := db.Where("id=? and is_del = ?", u.ID, 0).First(&user).Error; err != nil {
		return err
	}

	nowTime := uint32(time.Now().Unix())
	// 标记删除
	user.IsDel = 1
	user.DeletedAt = nowTime
	user.ModifiedAt = nowTime
	if err := db.Updates(&user).Error; err != nil {
		return err
	}
	return nil
}

2、增加 dao 方法

go
// UserDelete 删除用户
func (d *Dao) UserDelete(id uint32) error {
	user := models.User{
		Base: &models.Base{
			ID: id,
		},
	}
	return user.Delete(d.engine)
}

3、增加 services 方法

go
// UserDelete 删除用户
func (s *Services) UserDelete(param *requests.CommonIdRequest) error {
	return s.dao.UserDelete(param.ID)
}

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

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

go
package requests

import (
	"github.com/gin-gonic/gin"
	"github.com/joker-bai/hawkeye/pkg/app"
	"github.com/thedevsaddam/govalidator"
)

type CommonIdRequest struct {
	ID uint32 `json:"id" form:"id" valid:"id"`
}

func ValidCommonIdRequest(data interface{}, ctx *gin.Context) map[string][]string {
	rules := govalidator.MapData{
		"id": []string{"required"},
	}
	messages := govalidator.MapData{
		"id": []string{
			"required: ID不能为空,字段为 id",
		},
	}

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

	return errs
}

因为后续用 ID 的地方很多,所以单独创建一个CommonIdRequest结构体,可以复用。

4、增加 controllers 方法

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

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

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

	svc := services.New(ctx)
	if err := svc.UserDelete(&param); err != nil {
		global.Log.Error("用户删除失败", zap.String("error", err.Error()))
		response.ToErrorResponse(errorcode.ErrorUserDeleteFail)
		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)
}

测试

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

dbb972657b8e3b4ae06f1235f150f53f MD5

发送请求,删除用户成功。

d84d72ff1dccb93e9c5ad4fc3748bde9 MD5

数据库里标记为删除。

650e5c67e643d52e7f9dc2ec692797b6 MD5

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

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