|
|
|
|
@ -5,7 +5,6 @@ import (
|
|
|
|
|
"github.com/veypi/vbase/libs/auth"
|
|
|
|
|
"github.com/veypi/vbase/models"
|
|
|
|
|
"github.com/veypi/vigo"
|
|
|
|
|
"github.com/veypi/vigo/contrib/crud"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type userIDReq struct {
|
|
|
|
|
@ -33,7 +32,57 @@ func userGet(x *vigo.X, req *userIDReq) (*models.User, error) {
|
|
|
|
|
return data, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _ = Router.Get("/", "用户列表", auth.Check("user", "", auth.DoUpdate), crud.List(cfg.DB, &models.User{}))
|
|
|
|
|
type listReq struct {
|
|
|
|
|
Page int `src:"query" json:"page" desc:"页码"`
|
|
|
|
|
PageSize int `src:"query" json:"page_size" desc:"每页数量"`
|
|
|
|
|
Keyword string `src:"query" json:"keyword" desc:"搜索关键词"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
type listResp struct {
|
|
|
|
|
Items []*models.User `json:"items"`
|
|
|
|
|
Total int64 `json:"total"`
|
|
|
|
|
Page int `json:"page"`
|
|
|
|
|
PageSize int `json:"page_size"`
|
|
|
|
|
TotalPages int `json:"total_pages"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func userList(x *vigo.X, req *listReq) (*listResp, error) {
|
|
|
|
|
if req.Page <= 0 {
|
|
|
|
|
req.Page = 1
|
|
|
|
|
}
|
|
|
|
|
if req.PageSize <= 0 || req.PageSize > 100 {
|
|
|
|
|
req.PageSize = 10
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var total int64
|
|
|
|
|
query := cfg.DB().Model(&models.User{})
|
|
|
|
|
|
|
|
|
|
if req.Keyword != "" {
|
|
|
|
|
query = query.Where("username LIKE ? OR nickname LIKE ? OR email LIKE ?", "%"+req.Keyword+"%", "%"+req.Keyword+"%", "%"+req.Keyword+"%")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err := query.Count(&total).Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var items []*models.User
|
|
|
|
|
offset := (req.Page - 1) * req.PageSize
|
|
|
|
|
if err := query.Offset(offset).Limit(req.PageSize).Find(&items).Error; err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
totalPages := int((total + int64(req.PageSize) - 1) / int64(req.PageSize))
|
|
|
|
|
|
|
|
|
|
return &listResp{
|
|
|
|
|
Items: items,
|
|
|
|
|
Total: total,
|
|
|
|
|
Page: req.Page,
|
|
|
|
|
PageSize: req.PageSize,
|
|
|
|
|
TotalPages: totalPages,
|
|
|
|
|
}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var _ = Router.Get("/", "用户列表", auth.Check("user", "", auth.DoUpdate), userList)
|
|
|
|
|
|
|
|
|
|
var _ = Router.Patch("/{user_id}", "更新用户", auth.Check("user", "user_id", auth.DoUpdate, checkOwner), userPatch)
|
|
|
|
|
|
|
|
|
|
|