diff --git a/backend_v1/app/http/admin/medias.go b/backend_v1/app/http/admin/medias.go index 6a8d9cc..14edfe4 100644 --- a/backend_v1/app/http/admin/medias.go +++ b/backend_v1/app/http/admin/medias.go @@ -1,14 +1,13 @@ package admin import ( + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/app/services" - "quyun/v2/database" "quyun/v2/database/models" "quyun/v2/providers/ali" "github.com/gofiber/fiber/v3" - "go.ipao.vip/gen" ) // @provider @@ -21,19 +20,12 @@ type medias struct { // @Summary 媒体列表 // @Tags Admin Medias // @Produce json -// @Param pagination query requests.Pagination false "分页参数" // @Param query query ListQuery false "筛选条件" // @Success 200 {object} requests.Pager{items=models.Medium} "成功" // @Router /admin/v1/medias [get] -// @Bind pagination query // @Bind query query -func (ctl *medias) List(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) { - conds := []gen.Condition{} - if query.Keyword != nil { - conds = append(conds, models.MediumQuery.Name.Like(database.WrapLike(*query.Keyword))) - } - - return services.Media.List(ctx, pagination, conds...) +func (ctl *medias) List(ctx fiber.Ctx, query *dto.ListQuery) (*requests.Pager, error) { + return services.Media.List(ctx, query) } // Show media diff --git a/backend_v1/app/http/admin/orders.go b/backend_v1/app/http/admin/orders.go index 9debc9c..d43b756 100644 --- a/backend_v1/app/http/admin/orders.go +++ b/backend_v1/app/http/admin/orders.go @@ -1,7 +1,7 @@ package admin import ( - "quyun/v2/app/http/admin/dto" + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/app/services" "quyun/v2/database/models" diff --git a/backend_v1/app/http/admin/posts.go b/backend_v1/app/http/admin/posts.go index b88dd68..c7bebc9 100644 --- a/backend_v1/app/http/admin/posts.go +++ b/backend_v1/app/http/admin/posts.go @@ -1,22 +1,17 @@ package admin import ( + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/app/services" - "quyun/v2/database" "quyun/v2/database/models" "quyun/v2/pkg/fields" "github.com/gofiber/fiber/v3" "github.com/samber/lo" - "go.ipao.vip/gen" "go.ipao.vip/gen/types" ) -type ListQuery struct { - Keyword *string `query:"keyword"` -} - // @provider type posts struct{} @@ -25,18 +20,12 @@ type posts struct{} // @Summary 作品列表 // @Tags Admin Posts // @Produce json -// @Param pagination query requests.Pagination false "分页参数" -// @Param query query ListQuery false "筛选条件" +// @Param query query dto.PostListQuery false "筛选条件" // @Success 200 {object} requests.Pager{items=PostItem} "成功" // @Router /admin/v1/posts [get] -// @Bind pagination query // @Bind query query -func (ctl *posts) List(ctx fiber.Ctx, pagination *requests.Pagination, query *ListQuery) (*requests.Pager, error) { - conds := []gen.Condition{} - if query.Keyword != nil && *query.Keyword != "" { - conds = append(conds, models.PostQuery.Title.Like(database.WrapLike(*query.Keyword))) - } - pager, err := services.Posts.List(ctx, pagination, conds...) +func (ctl *posts) List(ctx fiber.Ctx, query *dto.PostListQuery) (*requests.Pager, error) { + pager, err := services.Posts.List(ctx, query) if err != nil { return nil, err } diff --git a/backend_v1/app/http/admin/routes.gen.go b/backend_v1/app/http/admin/routes.gen.go index d3ad9ef..a23b0c2 100644 --- a/backend_v1/app/http/admin/routes.gen.go +++ b/backend_v1/app/http/admin/routes.gen.go @@ -6,7 +6,7 @@ package admin import ( "go.ipao.vip/gen/field" - "quyun/v2/app/http/admin/dto" + "quyun/v2/app/http/dto" "quyun/v2/app/middlewares" "quyun/v2/app/requests" "quyun/v2/database/models" @@ -66,10 +66,9 @@ func (r *Routes) Register(router fiber.Router) { }, )) r.log.Debugf("Registering route: Get /admin/v1/medias -> medias.List") - router.Get("/admin/v1/medias"[len(r.Path()):], DataFunc2( + router.Get("/admin/v1/medias"[len(r.Path()):], DataFunc1( r.medias.List, - Query[requests.Pagination]("pagination"), - Query[ListQuery]("query"), + Query[dto.ListQuery]("query"), )) r.log.Debugf("Registering route: Get /admin/v1/medias/:id -> medias.Show") router.Get("/admin/v1/medias/:id"[len(r.Path()):], Func1( @@ -103,10 +102,9 @@ func (r *Routes) Register(router fiber.Router) { }, )) r.log.Debugf("Registering route: Get /admin/v1/posts -> posts.List") - router.Get("/admin/v1/posts"[len(r.Path()):], DataFunc2( + router.Get("/admin/v1/posts"[len(r.Path()):], DataFunc1( r.posts.List, - Query[requests.Pagination]("pagination"), - Query[ListQuery]("query"), + Query[dto.PostListQuery]("query"), )) r.log.Debugf("Registering route: Get /admin/v1/posts/:id -> posts.Show") router.Get("/admin/v1/posts/:id"[len(r.Path()):], DataFunc1( diff --git a/backend_v1/app/http/admin/users.go b/backend_v1/app/http/admin/users.go index 6f0c6f1..5db91db 100644 --- a/backend_v1/app/http/admin/users.go +++ b/backend_v1/app/http/admin/users.go @@ -1,7 +1,7 @@ package admin import ( - "quyun/v2/app/http/admin/dto" + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/app/services" "quyun/v2/database/models" diff --git a/backend_v1/app/http/dto/common.go b/backend_v1/app/http/dto/common.go new file mode 100644 index 0000000..4641f4f --- /dev/null +++ b/backend_v1/app/http/dto/common.go @@ -0,0 +1,8 @@ +package dto + +import "quyun/v2/app/requests" + +type ListQuery struct { + *requests.Pagination + Keyword *string `query:"keyword"` +} diff --git a/backend_v1/app/http/admin/dto/order.go b/backend_v1/app/http/dto/order.go similarity index 100% rename from backend_v1/app/http/admin/dto/order.go rename to backend_v1/app/http/dto/order.go diff --git a/backend_v1/app/http/dto/post.go b/backend_v1/app/http/dto/post.go new file mode 100644 index 0000000..db77420 --- /dev/null +++ b/backend_v1/app/http/dto/post.go @@ -0,0 +1,8 @@ +package dto + +import "quyun/v2/app/requests" + +type PostListQuery struct { + *requests.Pagination + Keyword *string `query:"keyword"` +} diff --git a/backend_v1/app/http/admin/dto/user.go b/backend_v1/app/http/dto/user.go similarity index 100% rename from backend_v1/app/http/admin/dto/user.go rename to backend_v1/app/http/dto/user.go diff --git a/backend_v1/app/http/posts.go b/backend_v1/app/http/posts.go index 785cd7e..6a709b6 100644 --- a/backend_v1/app/http/posts.go +++ b/backend_v1/app/http/posts.go @@ -5,6 +5,7 @@ import ( "strconv" "time" + "quyun/v2/app/http/dto" "quyun/v2/app/jobs" "quyun/v2/app/requests" "quyun/v2/app/services" @@ -39,30 +40,13 @@ type posts struct { // @Summary 作品列表 // @Tags Posts // @Produce json -// @Param pagination query requests.Pagination false "分页参数" -// @Param query query ListQuery false "筛选条件" +// @Param query query dto.PostListQuery false "筛选条件" // @Success 200 {object} requests.Pager{items=PostItem} "成功" // @Router /v1/posts [get] -// @Bind pagination query // @Bind query query // @Bind user local -func (ctl *posts) List( - ctx fiber.Ctx, - pagination *requests.Pagination, - query *ListQuery, - user *models.User, -) (*requests.Pager, error) { - tbl, _ := models.PostQuery.QueryContext(ctx) - conds := []gen.Condition{ - tbl.Status.Eq(fields.PostStatusPublished), - } - if query.Keyword != nil && *query.Keyword != "" { - conds = append(conds, - tbl.Title.Like(database.WrapLike(*query.Keyword)), - ) - } - - pager, err := services.Posts.List(ctx, pagination, conds...) +func (ctl *posts) List(ctx fiber.Ctx, query *dto.PostListQuery, user *models.User) (*requests.Pager, error) { + pager, err := services.Posts.List(ctx, query) if err != nil { log.WithError(err).Errorf("post list err: %v", err) return nil, err diff --git a/backend_v1/app/http/routes.gen.go b/backend_v1/app/http/routes.gen.go index 021d5ee..e728a5c 100644 --- a/backend_v1/app/http/routes.gen.go +++ b/backend_v1/app/http/routes.gen.go @@ -6,6 +6,7 @@ package http import ( "go.ipao.vip/gen/field" + "quyun/v2/app/http/dto" "quyun/v2/app/middlewares" "quyun/v2/app/requests" "quyun/v2/database/models" @@ -58,10 +59,9 @@ func (r *Routes) Register(router fiber.Router) { )) // Register routes for controller: posts r.log.Debugf("Registering route: Get /v1/posts -> posts.List") - router.Get("/v1/posts"[len(r.Path()):], DataFunc3( + router.Get("/v1/posts"[len(r.Path()):], DataFunc2( r.posts.List, - Query[requests.Pagination]("pagination"), - Query[ListQuery]("query"), + Query[dto.PostListQuery]("query"), Local[*models.User]("user"), )) r.log.Debugf("Registering route: Get /v1/posts/:id/play -> posts.Play") diff --git a/backend_v1/app/services/media.go b/backend_v1/app/services/media.go index a21f637..c0c821a 100644 --- a/backend_v1/app/services/media.go +++ b/backend_v1/app/services/media.go @@ -3,7 +3,9 @@ package services import ( "context" + "quyun/v2/app/http/dto" "quyun/v2/app/requests" + "quyun/v2/database" "quyun/v2/database/models" "quyun/v2/pkg/fields" @@ -14,19 +16,18 @@ import ( // @provider type media struct{} -func (m *media) List( - ctx context.Context, - pagination *requests.Pagination, - conds ...gen.Condition, -) (*requests.Pager, error) { - pagination.Format() +func (m *media) List(ctx context.Context, filter *dto.ListQuery) (*requests.Pager, error) { + filter.Format() tbl, query := models.MediumQuery.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.Name.Like(database.WrapLike(*filter.Keyword))) + } + + items, cnt, err := query.FindByPage(int(filter.Offset()), int(filter.Limit)) if err != nil { return nil, errors.Wrap(err, "failed to list media items") } @@ -34,7 +35,7 @@ func (m *media) List( return &requests.Pager{ Items: items, Total: cnt, - Pagination: *pagination, + Pagination: *filter.Pagination, }, nil } diff --git a/backend_v1/app/services/orders.go b/backend_v1/app/services/orders.go index e6ddeb7..4184051 100644 --- a/backend_v1/app/services/orders.go +++ b/backend_v1/app/services/orders.go @@ -4,7 +4,7 @@ import ( "context" "time" - "quyun/v2/app/http/admin/dto" + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/database" "quyun/v2/database/models" diff --git a/backend_v1/app/services/posts.go b/backend_v1/app/services/posts.go index 4f2e825..be97e4e 100644 --- a/backend_v1/app/services/posts.go +++ b/backend_v1/app/services/posts.go @@ -4,6 +4,7 @@ import ( "context" "time" + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/database" "quyun/v2/database/models" @@ -28,17 +29,20 @@ func (m *posts) IncrViewCount(ctx context.Context, postID int64) error { } // List -func (m *posts) List( - ctx context.Context, - pagination *requests.Pagination, - conds ...gen.Condition, -) (*requests.Pager, error) { - pagination.Format() +func (m *posts) List(ctx context.Context, filter *dto.PostListQuery) (*requests.Pager, error) { + filter.Pagination.Format() + + // conds := []gen.Condition{} tbl, query := models.PostQuery.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 != "" { + keyword := database.WrapLike(*filter.Keyword) + query = query.Where(tbl.Title.Like(keyword)) + } + + items, cnt, err := query.FindByPage(int(filter.Offset()), int(filter.Limit)) if err != nil { return nil, errors.Wrap(err, "list post failed") } @@ -46,7 +50,7 @@ func (m *posts) List( return &requests.Pager{ Items: items, Total: cnt, - Pagination: *pagination, + Pagination: *filter.Pagination, }, nil } diff --git a/backend_v1/app/services/users.go b/backend_v1/app/services/users.go index 7d297d4..bc5e2a9 100644 --- a/backend_v1/app/services/users.go +++ b/backend_v1/app/services/users.go @@ -10,7 +10,7 @@ import ( "sync" "time" - "quyun/v2/app/http/admin/dto" + "quyun/v2/app/http/dto" "quyun/v2/app/requests" "quyun/v2/database" "quyun/v2/database/models"