package admin import ( "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{} // List users // // @Router /admin/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{ models.UserQuery.Username.Like(database.WrapLike(*query.Keyword)), } return services.Users.List(ctx, pagination, conds...) } // Show user // // @Router /admin/users/:id [get] // @Bind id path func (ctl *users) Show(ctx fiber.Ctx, id int64) (*models.User, error) { return services.Users.FindByID(ctx, id) } // Articles show user bought articles // // @Router /admin/users/:id/articles [get] // @Bind id path // @Bind pagination query func (ctl *users) Articles(ctx fiber.Ctx, id int64, pagination *requests.Pagination) (*requests.Pager, error) { return services.Posts.Bought(ctx, id, pagination) } type UserBalance struct { Balance int64 `json:"balance"` } // Balance // // @Router /admin/users/:id/balance [post] // @Bind id path // @Bind balance body func (ctl *users) Balance(ctx fiber.Ctx, id int64, balance *UserBalance) error { user, err := services.Users.FindByID(ctx, id) if err != nil { return err } return services.Users.AddBalance(ctx, user.ID, balance.Balance) }