feat: 重构用户列表查询,支持通过手机号和用户名搜索
This commit is contained in:
8
backend_v1/app/http/admin/dto/user.go
Normal file
8
backend_v1/app/http/admin/dto/user.go
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
package dto
|
||||||
|
|
||||||
|
import "quyun/v2/app/requests"
|
||||||
|
|
||||||
|
type UserListQuery struct {
|
||||||
|
*requests.Pagination
|
||||||
|
Keyword *string `query:"keyword"`
|
||||||
|
}
|
||||||
@@ -162,10 +162,9 @@ func (r *Routes) Register(router fiber.Router) {
|
|||||||
))
|
))
|
||||||
// Register routes for controller: users
|
// Register routes for controller: users
|
||||||
r.log.Debugf("Registering route: Get /admin/v1/users -> users.List")
|
r.log.Debugf("Registering route: Get /admin/v1/users -> users.List")
|
||||||
router.Get("/admin/v1/users"[len(r.Path()):], DataFunc2(
|
router.Get("/admin/v1/users"[len(r.Path()):], DataFunc1(
|
||||||
r.users.List,
|
r.users.List,
|
||||||
Query[requests.Pagination]("pagination"),
|
Query[dto.UserListQuery]("query"),
|
||||||
Query[UserListQuery]("query"),
|
|
||||||
))
|
))
|
||||||
r.log.Debugf("Registering route: Get /admin/v1/users/:id -> users.Show")
|
r.log.Debugf("Registering route: Get /admin/v1/users/:id -> users.Show")
|
||||||
router.Get("/admin/v1/users/:id"[len(r.Path()):], DataFunc1(
|
router.Get("/admin/v1/users/:id"[len(r.Path()):], DataFunc1(
|
||||||
|
|||||||
@@ -1,19 +1,14 @@
|
|||||||
package admin
|
package admin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"quyun/v2/app/http/admin/dto"
|
||||||
"quyun/v2/app/requests"
|
"quyun/v2/app/requests"
|
||||||
"quyun/v2/app/services"
|
"quyun/v2/app/services"
|
||||||
"quyun/v2/database"
|
|
||||||
"quyun/v2/database/models"
|
"quyun/v2/database/models"
|
||||||
|
|
||||||
"github.com/gofiber/fiber/v3"
|
"github.com/gofiber/fiber/v3"
|
||||||
"go.ipao.vip/gen"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type UserListQuery struct {
|
|
||||||
Keyword *string `query:"keyword"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// @provider
|
// @provider
|
||||||
type users struct{}
|
type users struct{}
|
||||||
|
|
||||||
@@ -22,20 +17,12 @@ type users struct{}
|
|||||||
// @Summary 用户列表
|
// @Summary 用户列表
|
||||||
// @Tags Admin Users
|
// @Tags Admin Users
|
||||||
// @Produce json
|
// @Produce json
|
||||||
// @Param pagination query requests.Pagination false "分页参数"
|
|
||||||
// @Param query query UserListQuery false "筛选条件"
|
// @Param query query UserListQuery false "筛选条件"
|
||||||
// @Success 200 {object} requests.Pager{items=models.User} "成功"
|
// @Success 200 {object} requests.Pager{items=models.User} "成功"
|
||||||
// @Router /admin/v1/users [get]
|
// @Router /admin/v1/users [get]
|
||||||
// @Bind pagination query
|
|
||||||
// @Bind query query
|
// @Bind query query
|
||||||
func (ctl *users) List(ctx fiber.Ctx, pagination *requests.Pagination, query *UserListQuery) (*requests.Pager, error) {
|
func (ctl *users) List(ctx fiber.Ctx, query *dto.UserListQuery) (*requests.Pager, error) {
|
||||||
conds := []gen.Condition{}
|
return services.Users.List(ctx, query)
|
||||||
if query.Keyword != nil && *query.Keyword != "" {
|
|
||||||
conds = append(conds,
|
|
||||||
models.UserQuery.Phone.Like(database.WrapLike(*query.Keyword)),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return services.Users.List(ctx, pagination, conds...)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Show user
|
// Show user
|
||||||
|
|||||||
@@ -5,11 +5,14 @@ import (
|
|||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/big"
|
"math/big"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"quyun/v2/app/http/admin/dto"
|
||||||
"quyun/v2/app/requests"
|
"quyun/v2/app/requests"
|
||||||
|
"quyun/v2/database"
|
||||||
"quyun/v2/database/models"
|
"quyun/v2/database/models"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
@@ -38,16 +41,24 @@ func (m *users) Prepare() error {
|
|||||||
// List returns a paginated list of users
|
// List returns a paginated list of users
|
||||||
func (m *users) List(
|
func (m *users) List(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
pagination *requests.Pagination,
|
filter *dto.UserListQuery,
|
||||||
conds ...gen.Condition,
|
|
||||||
) (*requests.Pager, error) {
|
) (*requests.Pager, error) {
|
||||||
pagination.Format()
|
filter.Pagination.Format()
|
||||||
tbl, query := models.UserQuery.QueryContext(ctx)
|
tbl, query := models.UserQuery.QueryContext(ctx)
|
||||||
|
|
||||||
items, cnt, err := query.
|
query = query.Order(tbl.ID.Desc())
|
||||||
Where(conds...).
|
|
||||||
Order(tbl.ID.Desc()).
|
if filter.Keyword != nil && *filter.Keyword != "" {
|
||||||
FindByPage(int(pagination.Offset()), int(pagination.Limit))
|
query = query.
|
||||||
|
Where(tbl.Phone.Like(database.WrapLike(*filter.Keyword))).
|
||||||
|
Or(tbl.Username.Like(database.WrapLike(*filter.Keyword)))
|
||||||
|
|
||||||
|
if id, err := strconv.ParseInt(strings.TrimSpace(*filter.Keyword), 10, 64); err == nil && id > 0 {
|
||||||
|
query = query.Or(tbl.ID.Eq(id))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
items, cnt, err := query.FindByPage(int(filter.Pagination.Offset()), int(filter.Pagination.Limit))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrap(err, "query users error")
|
return nil, errors.Wrap(err, "query users error")
|
||||||
}
|
}
|
||||||
@@ -55,7 +66,7 @@ func (m *users) List(
|
|||||||
return &requests.Pager{
|
return &requests.Pager{
|
||||||
Items: items,
|
Items: items,
|
||||||
Total: cnt,
|
Total: cnt,
|
||||||
Pagination: *pagination,
|
Pagination: *filter.Pagination,
|
||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user