增加下载Package到UserSpace的命令

This commit is contained in:
Sydonian 2025-07-01 10:23:53 +08:00
parent e4ae3cd25b
commit ba46e08e68
8 changed files with 115 additions and 28 deletions

View File

@ -186,9 +186,6 @@ func (svc *UserSpaceService) Test(req cliapi.UserSpaceTest) (*cliapi.UserSpaceTe
}
func (svc *UserSpaceService) DownloadPackage(packageID clitypes.PackageID, userspaceID clitypes.UserSpaceID, rootPath string) error {
coorCli := stgglb.CoordinatorRPCPool.Get()
defer coorCli.Release()
destStg := svc.UserSpaceMeta.Get(userspaceID)
if destStg == nil {
return fmt.Errorf("userspace not found: %d", userspaceID)

View File

@ -169,7 +169,7 @@ func Test_Storage(t *testing.T) {
})
So(err, ShouldBeNil)
_, err = cli.UserSpaceDownloadPackage(UserSpaceDownloadPackageReq{
_, err = cli.UserSpace().DownloadPackage(UserSpaceDownloadPackageReq{
PackageID: createResp.Package.PackageID,
UserSpaceID: 1,
})

View File

@ -8,6 +8,14 @@ import (
cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
)
type UserSpaceService struct {
*Client
}
func (c *Client) UserSpace() *UserSpaceService {
return &UserSpaceService{c}
}
const UserSpaceDownloadPackagePath = "/userSpace/downloadPackage"
type UserSpaceDownloadPackageReq struct {
@ -26,7 +34,7 @@ func (r *UserSpaceDownloadPackageResp) ParseResponse(resp *http.Response) error
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceDownloadPackage(req UserSpaceDownloadPackageReq) (*UserSpaceDownloadPackageResp, error) {
func (c *UserSpaceService) DownloadPackage(req UserSpaceDownloadPackageReq) (*UserSpaceDownloadPackageResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceDownloadPackageResp{})
}
@ -52,7 +60,7 @@ func (r *UserSpaceCreatePackageResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceCreatePackage(req UserSpaceCreatePackageReq) (*UserSpaceCreatePackageResp, error) {
func (c *UserSpaceService) CreatePackage(req UserSpaceCreatePackageReq) (*UserSpaceCreatePackageResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceCreatePackageResp{})
}
@ -74,11 +82,11 @@ func (r *UserSpaceGetResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceGet(req UserSpaceGet) (*UserSpaceGetResp, error) {
func (c *UserSpaceService) Get(req UserSpaceGet) (*UserSpaceGetResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetResp{})
}
const UserSpaceGetByNamePath = "/userspace/getByName"
const UserSpaceGetByNamePath = "/userSpace/getByName"
type UserSpaceGetByName struct {
Name string `form:"name" url:"name" binding:"required"`
@ -89,18 +97,18 @@ func (r *UserSpaceGetByName) MakeParam() *sdks.RequestParam {
}
type UserSpaceGetByNameResp struct {
clitypes.UserSpace
UserSpace clitypes.UserSpace `json:"userSpace"`
}
func (r *UserSpaceGetByNameResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceGetByName(req UserSpaceGetByName) (*UserSpaceGetByNameResp, error) {
func (c *UserSpaceService) GetByName(req UserSpaceGetByName) (*UserSpaceGetByNameResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetByNameResp{})
}
const UserSpaceGetAllPath = "/userspace/getAll"
const UserSpaceGetAllPath = "/userSpace/getAll"
type UserSpaceGetAll struct{}
@ -116,7 +124,7 @@ func (r *UserSpaceGetAllResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceGetAll() (*UserSpaceGetAllResp, error) {
func (c *UserSpaceService) GetAll() (*UserSpaceGetAllResp, error) {
req := UserSpaceGetAll{}
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetAllResp{})
}
@ -145,7 +153,7 @@ func (r *UserSpaceCreateResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceCreate(req UserSpaceCreate) (*UserSpaceCreateResp, error) {
func (c *UserSpaceService) Create(req UserSpaceCreate) (*UserSpaceCreateResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceCreateResp{})
}
@ -164,14 +172,14 @@ func (r *UserSpaceUpdate) MakeParam() *sdks.RequestParam {
}
type UserSpaceUpdateResp struct {
clitypes.UserSpace
UserSpace clitypes.UserSpace `json:"userSpace"`
}
func (r *UserSpaceUpdateResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceUpdate(req UserSpaceUpdate) (*UserSpaceUpdateResp, error) {
func (c *UserSpaceService) Update(req UserSpaceUpdate) (*UserSpaceUpdateResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceUpdateResp{})
}
@ -192,7 +200,7 @@ func (r *UserSpaceDeleteResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceDelete(req UserSpaceDelete) (*UserSpaceDeleteResp, error) {
func (c *UserSpaceService) Delete(req UserSpaceDelete) (*UserSpaceDeleteResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceDeleteResp{})
}
@ -217,6 +225,6 @@ func (r *UserSpaceTestResp) ParseResponse(resp *http.Response) error {
return sdks.ParseCodeDataJSONResponse(resp, r)
}
func (c *Client) UserSpaceTest(req UserSpaceTest) (*UserSpaceTestResp, error) {
func (c *UserSpaceService) Test(req UserSpaceTest) (*UserSpaceTestResp, error) {
return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceTestResp{})
}

View File

@ -79,7 +79,7 @@ func create(c *cobra.Command, ctx *cmd.CommandContext) {
return
}
_, err = ctx.Client.UserSpaceCreate(userSpace.UserSpaceCreate)
_, err = ctx.Client.UserSpace().Create(userSpace.UserSpaceCreate)
if err != nil {
fmt.Printf("\033[31m保存配置失败: %v\033[0m", err)
return

View File

@ -60,7 +60,7 @@ func delete(c *cobra.Command, ctx *cmd.CommandContext) {
return
}
resp, err := ctx.Client.UserSpaceGet(cliapi.UserSpaceGet{
resp, err := ctx.Client.UserSpace().Get(cliapi.UserSpaceGet{
UserSpaceID: clitypes.UserSpaceID(id),
})
if err != nil {
@ -78,7 +78,7 @@ func delete(c *cobra.Command, ctx *cmd.CommandContext) {
}
name := strings.TrimSpace(nameInput)
resp, err := ctx.Client.UserSpaceGetByName(cliapi.UserSpaceGetByName{
resp, err := ctx.Client.UserSpace().GetByName(cliapi.UserSpaceGetByName{
Name: name,
})
if err != nil {
@ -100,7 +100,7 @@ func delete(c *cobra.Command, ctx *cmd.CommandContext) {
return
}
_, err = ctx.Client.UserSpaceDelete(cliapi.UserSpaceDelete{
_, err = ctx.Client.UserSpace().Delete(cliapi.UserSpaceDelete{
UserSpaceID: userSpace.UserSpaceID,
})
if err != nil {

View File

@ -0,0 +1,83 @@
package userspace
import (
"fmt"
"strings"
"time"
"github.com/spf13/cobra"
cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
"gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd"
)
func init() {
var opt option
c := &cobra.Command{
Use: "getp <bucket_name>/<package_name> <space_name>:<root_path>",
Short: "download package all files to user space",
Args: cobra.ExactArgs(2),
RunE: func(c *cobra.Command, args []string) error {
ctx := cmd.GetCmdCtx(c)
return getp(c, ctx, opt, args)
},
}
// c.Flags().StringVar(&opt.Prefix, "prefix", "", "download objects with this prefix")
// c.Flags().StringVar(&opt.NewPrefix, "new", "", "replace prefix specified by --prefix with this prefix")
// c.Flags().BoolVar(&opt.Zip, "zip", false, "download as zip file")
// c.Flags().StringVarP(&opt.Output, "output", "o", "", "output zip file name")
UserSpaceCmd.AddCommand(c)
}
type option struct {
// Prefix string
// NewPrefix string
// Zip bool
// Output string
}
func getp(c *cobra.Command, ctx *cmd.CommandContext, opt option, args []string) error {
comps := strings.Split(args[0], "/")
if len(comps) != 2 {
return fmt.Errorf("invalid package name: %s", args[0])
}
bucketName, packageName := comps[0], comps[1]
comps = strings.Split(args[1], ":")
if len(comps) != 2 {
return fmt.Errorf("invalid space name and root path: %s", args[1])
}
spaceName, rootPath := comps[0], comps[1]
getPkg, err := ctx.Client.Package().GetByFullName(cliapi.PackageGetByFullName{
BucketName: bucketName,
PackageName: packageName,
})
if err != nil {
return fmt.Errorf("get package %v: %w", args[0], err)
}
getSpace, err := ctx.Client.UserSpace().GetByName(cliapi.UserSpaceGetByName{
Name: spaceName,
})
if err != nil {
return fmt.Errorf("get user space %v: %w", spaceName, err)
}
startTime := time.Now()
_, err = ctx.Client.UserSpace().DownloadPackage(cliapi.UserSpaceDownloadPackageReq{
PackageID: getPkg.Package.PackageID,
UserSpaceID: getSpace.UserSpace.UserSpaceID,
RootPath: rootPath,
})
if err != nil {
return fmt.Errorf("download package %v to user space %v: %w", args[0], spaceName, err)
}
dt := time.Since(startTime)
fmt.Printf("download package %v to user space %v success, time: %v\n", args[0], spaceName, dt)
return nil
}

View File

@ -35,7 +35,7 @@ type lsOpt struct {
func ls(c *cobra.Command, ctx *cmd.CommandContext, opt lsOpt, args []string) error {
// 仅ls无参数
if len(args) == 0 {
resp, err := ctx.Client.UserSpaceGetAll()
resp, err := ctx.Client.UserSpace().GetAll()
if err != nil {
return err
}
@ -58,7 +58,7 @@ func ls(c *cobra.Command, ctx *cmd.CommandContext, opt lsOpt, args []string) err
return fmt.Errorf("ID必须是数字")
}
result, err := ctx.Client.UserSpaceGet(cliapi.UserSpaceGet{
result, err := ctx.Client.UserSpace().Get(cliapi.UserSpaceGet{
UserSpaceID: clitypes.UserSpaceID(id),
})
if err != nil {
@ -67,7 +67,7 @@ func ls(c *cobra.Command, ctx *cmd.CommandContext, opt lsOpt, args []string) err
userSpace = &result.UserSpace
} else {
result, err := ctx.Client.UserSpaceGetByName(cliapi.UserSpaceGetByName{
result, err := ctx.Client.UserSpace().GetByName(cliapi.UserSpaceGetByName{
Name: searchKey,
})
if err != nil {

View File

@ -7,7 +7,6 @@ import (
"github.com/chzyer/readline"
"github.com/spf13/cobra"
"gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types"
cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types"
@ -15,7 +14,7 @@ import (
)
type UserSpaceUpdate struct {
api.UserSpaceUpdate
cliapi.UserSpaceUpdate
}
func init() {
@ -50,7 +49,7 @@ func update(c *cobra.Command, ctx *cmd.CommandContext) {
return
}
resp, err := ctx.Client.UserSpaceGet(cliapi.UserSpaceGet{
resp, err := ctx.Client.UserSpace().Get(cliapi.UserSpaceGet{
UserSpaceID: clitypes.UserSpaceID(id),
})
if err != nil {
@ -87,7 +86,7 @@ func update(c *cobra.Command, ctx *cmd.CommandContext) {
return
}
_, err = ctx.Client.UserSpaceUpdate(userSpaceUpdate.UserSpaceUpdate)
_, err = ctx.Client.UserSpace().Update(userSpaceUpdate.UserSpaceUpdate)
if err != nil {
fmt.Printf("\033[31m更新配置失败: %v\033[0m", err)
return