删除用户 原创
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, ¶m, requests.ValidCommonIdRequest); !ok {
return
}
svc := services.New(ctx)
if err := svc.UserDelete(¶m); 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 进行测试。
发送请求,删除用户成功。
数据库里标记为删除。
生成接口文档并增加代码版本
go
$ swag.exe init
$ git add .
$ git commit -m "新增用户删除模块"