列出用户 原创
1、新增数据操作
在internal/app/models/user.go
中,新增如下操作:
go
// List 列出用户
func (u *User) List(db *gorm.DB, page, limit int) ([]*User, error) {
var (
users []*User
err error
)
startIndex := (page - 1) * limit
db = db.Offset(startIndex).Limit(limit)
// 如果有username,表示查询某个用户的信息
if u.Username != "" {
db = db.Where("username=?", u.Username)
}
if err = db.Where("is_del = ?", 0).Find(&users).Error; err != nil {
return nil, err
}
return users, nil
}
3、新增 dao 方法
在 internal/app/dao/user.go
中新增以下内容:
go
// UserList 列出用户信息
func (d *Dao) UserList(username string, page, limit int) ([]*models.User, error) {
user := models.User{
Username: username,
}
return user.List(d.engine, page, limit)
}
4、新增 services 方法
4.1、新增参数校验
在 internal/app/requests
目录中新增 user.go
方法,增加增删改查方法的参数校验,如下:
go
type UserListRequest struct {
Username string `json:"username,omitempty" form:"username"`
Page int `json:"page,omitempty" form:"page" valid:"page" description:"页码"`
Limit int `json:"limit,omitempty" form:"limit" valid:"limit" description:"每页数量"`
}
func ValidUserListRequest(data interface{}, ctx *gin.Context) map[string][]string {
rules := govalidator.MapData{
"page": []string{"required"},
"limit": []string{"required"},
}
messages := govalidator.MapData{
"page": []string{
"required: 页数不能为空",
},
"limit": []string{
"required: 每页条数不能为空",
},
}
// 校验入参
return app.ValidateOptions(data, rules, messages)
}
4.2、新增 services 方法
在 internal/app/services
目录中新增 user.go
文件,新增用户的增删改查方法,如下:
go
// UserList 列出用户
func (s *Services) UserList(param *requests.UserListRequest) ([]*models.User, error) {
return s.dao.UserList(param.Username, param.Page, param.Limit)
}
5、新增 controllers 方法
在 internal/app/controllers/api/v1
目录中新增 user.go
文件,新增用户增删改查控制器方法,如下:
go
// Create godoc
// @Summary 列出用户
// @Description 列出用户
// @Tags 用户管理
// @Produce json
// @Security ApiKeyAuth
// @Param username query string false "用户名" maxlength(100)
// @Param page query int true "页码"
// @Param limit query int true "每页数量"
// @Success 200 {object} string "成功"
// @Failure 400 {object} errorcode.Error "请求错误"
// @Failure 500 {object} errorcode.Error "内部错误"
// @Router /api/v1/user/list [get]
func (u *UserController) List(ctx *gin.Context) {
param := requests.UserListRequest{}
response := app.NewResponse(ctx)
if ok := app.Validate(ctx, ¶m, requests.ValidUserListRequest); !ok {
return
}
svc := services.New(ctx)
users, err := svc.UserList(¶m)
if err != nil {
global.Log.Error("获取用户列表失败", zap.String("error", err.Error()))
response.ToErrorResponse(errorcode.ErrorUserListFail)
return
}
response.ToResponseList(users, len(users))
}
6、新增路由
6.1、新增路由
在 internal/app/routers
目录中新增 user.go
文件,增加用户的路由操作,如下:
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)
r.GET("/user/list", uc.List)
}
7、测试一下
在 apifox
上创建列出用户接口,测试结果如下:
8、生成文档和代码标记
本节开发完成,记得重新生成文档和代码标记,如下:
go
$ swag init
$ git add .
$ git commit -m "新增列出用户模块"