Skip to content

列出用户 原创

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, &param, requests.ValidUserListRequest); !ok {
		return
	}

	svc := services.New(ctx)
	users, err := svc.UserList(&param)
	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 上创建列出用户接口,测试结果如下:

33c1452166687fcdfc35fbb7bf449810 MD5

8、生成文档和代码标记

本节开发完成,记得重新生成文档和代码标记,如下:

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