diff --git a/backend_v1/app/http/admin/dto/user.go b/backend_v1/app/http/admin/dto/user.go new file mode 100644 index 0000000..fdd97ca --- /dev/null +++ b/backend_v1/app/http/admin/dto/user.go @@ -0,0 +1,8 @@ +package dto + +import "quyun/v2/app/requests" + +type UserListQuery struct { + *requests.Pagination + Keyword *string `query:"keyword"` +} diff --git a/backend_v1/app/http/admin/routes.gen.go b/backend_v1/app/http/admin/routes.gen.go index d74811c..d3ad9ef 100644 --- a/backend_v1/app/http/admin/routes.gen.go +++ b/backend_v1/app/http/admin/routes.gen.go @@ -162,10 +162,9 @@ func (r *Routes) Register(router fiber.Router) { )) // Register routes for controller: users 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, - Query[requests.Pagination]("pagination"), - Query[UserListQuery]("query"), + Query[dto.UserListQuery]("query"), )) r.log.Debugf("Registering route: Get /admin/v1/users/:id -> users.Show") router.Get("/admin/v1/users/:id"[len(r.Path()):], DataFunc1( diff --git a/backend_v1/app/http/admin/users.go b/backend_v1/app/http/admin/users.go index 0c2b18c..6f0c6f1 100644 --- a/backend_v1/app/http/admin/users.go +++ b/backend_v1/app/http/admin/users.go @@ -1,19 +1,14 @@ package admin import ( + "quyun/v2/app/http/admin/dto" "quyun/v2/app/requests" "quyun/v2/app/services" - "quyun/v2/database" "quyun/v2/database/models" "github.com/gofiber/fiber/v3" - "go.ipao.vip/gen" ) -type UserListQuery struct { - Keyword *string `query:"keyword"` -} - // @provider type users struct{} @@ -22,20 +17,12 @@ type users struct{} // @Summary 用户列表 // @Tags Admin Users // @Produce json -// @Param pagination query requests.Pagination false "分页参数" // @Param query query UserListQuery false "筛选条件" // @Success 200 {object} requests.Pager{items=models.User} "成功" // @Router /admin/v1/users [get] -// @Bind pagination query // @Bind query query -func (ctl *users) List(ctx fiber.Ctx, pagination *requests.Pagination, query *UserListQuery) (*requests.Pager, error) { - conds := []gen.Condition{} - if query.Keyword != nil && *query.Keyword != "" { - conds = append(conds, - models.UserQuery.Phone.Like(database.WrapLike(*query.Keyword)), - ) - } - return services.Users.List(ctx, pagination, conds...) +func (ctl *users) List(ctx fiber.Ctx, query *dto.UserListQuery) (*requests.Pager, error) { + return services.Users.List(ctx, query) } // Show user diff --git a/backend_v1/app/services/users.go b/backend_v1/app/services/users.go index d854230..7d297d4 100644 --- a/backend_v1/app/services/users.go +++ b/backend_v1/app/services/users.go @@ -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 }