feat: 重构用户列表查询,支持通过手机号和用户名搜索
This commit is contained in:
@@ -5,11 +5,14 @@ import (
|
||||
"crypto/rand"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"quyun/v2/app/http/admin/dto"
|
||||
"quyun/v2/app/requests"
|
||||
"quyun/v2/database"
|
||||
"quyun/v2/database/models"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@@ -38,16 +41,24 @@ func (m *users) Prepare() error {
|
||||
// List returns a paginated list of users
|
||||
func (m *users) List(
|
||||
ctx context.Context,
|
||||
pagination *requests.Pagination,
|
||||
conds ...gen.Condition,
|
||||
filter *dto.UserListQuery,
|
||||
) (*requests.Pager, error) {
|
||||
pagination.Format()
|
||||
filter.Pagination.Format()
|
||||
tbl, query := models.UserQuery.QueryContext(ctx)
|
||||
|
||||
items, cnt, err := query.
|
||||
Where(conds...).
|
||||
Order(tbl.ID.Desc()).
|
||||
FindByPage(int(pagination.Offset()), int(pagination.Limit))
|
||||
query = query.Order(tbl.ID.Desc())
|
||||
|
||||
if filter.Keyword != nil && *filter.Keyword != "" {
|
||||
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 {
|
||||
return nil, errors.Wrap(err, "query users error")
|
||||
}
|
||||
@@ -55,7 +66,7 @@ func (m *users) List(
|
||||
return &requests.Pager{
|
||||
Items: items,
|
||||
Total: cnt,
|
||||
Pagination: *pagination,
|
||||
Pagination: *filter.Pagination,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user