diff --git a/jcsctl/cmd/bucket/delete.go b/jcsctl/cmd/bucket/delete.go new file mode 100644 index 0000000..d3452ab --- /dev/null +++ b/jcsctl/cmd/bucket/delete.go @@ -0,0 +1,58 @@ +package bucket + +import ( + "fmt" + "strconv" + + "github.com/spf13/cobra" + cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1" + clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types" + "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd" +) + +func init() { + var opt deleteOpt + cmd := cobra.Command{ + Use: "delete ", + Aliases: []string{"del"}, + Args: cobra.ExactArgs(1), + RunE: func(c *cobra.Command, args []string) error { + ctx := cmd.GetCmdCtx(c) + return delete(c, ctx, opt, args) + }, + } + cmd.Flags().BoolVar(&opt.UseID, "id", false, "treat first argument as bucket ID") + BucketCmd.AddCommand(&cmd) +} + +type deleteOpt struct { + UseID bool +} + +func delete(c *cobra.Command, ctx *cmd.CommandContext, opt deleteOpt, args []string) error { + var bktID clitypes.BucketID + if opt.UseID { + id, err := strconv.ParseInt(args[0], 10, 64) + if err != nil { + return fmt.Errorf("invalid bucket ID: %v", args[0]) + } + bktID = clitypes.BucketID(id) + } else { + bktName := args[0] + bkt, err := ctx.Client.Bucket().GetByName(cliapi.BucketGetByName{ + Name: args[0], + }) + if err != nil { + return fmt.Errorf("get bucket by name %v: %v", bktName, err) + } + bktID = bkt.Bucket.BucketID + } + + if err := ctx.Client.Bucket().Delete(cliapi.BucketDelete{ + BucketID: bktID, + }); err != nil { + return fmt.Errorf("delete bucket %v: %v", bktID, err) + } + + return nil +} diff --git a/jcsctl/cmd/bucket/new.go b/jcsctl/cmd/bucket/new.go new file mode 100644 index 0000000..5b564a1 --- /dev/null +++ b/jcsctl/cmd/bucket/new.go @@ -0,0 +1,36 @@ +package bucket + +import ( + "fmt" + + "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 newOpt + cmd := cobra.Command{ + Use: "new ", + Args: cobra.ExactArgs(1), + RunE: func(c *cobra.Command, args []string) error { + ctx := cmd.GetCmdCtx(c) + return new(c, ctx, opt, args) + }, + } + BucketCmd.AddCommand(&cmd) +} + +type newOpt struct { +} + +func new(c *cobra.Command, ctx *cmd.CommandContext, opt newOpt, args []string) error { + resp, err := ctx.Client.Bucket().Create(cliapi.BucketCreate{ + Name: args[0], + }) + if err != nil { + return fmt.Errorf("create bucket %v: %v", args[0], err) + } + printOneBucket(resp.Bucket) + return nil +} diff --git a/jcsctl/cmd/bucket/utils.go b/jcsctl/cmd/bucket/utils.go new file mode 100644 index 0000000..68e7555 --- /dev/null +++ b/jcsctl/cmd/bucket/utils.go @@ -0,0 +1,15 @@ +package bucket + +import ( + "fmt" + + "github.com/jedib0t/go-pretty/v6/table" + clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types" +) + +func printOneBucket(bkt clitypes.Bucket) { + tb := table.NewWriter() + tb.AppendHeader(table.Row{"ID", "Name", "CreateTime"}) + tb.AppendRow(table.Row{bkt.BucketID, bkt.Name, bkt.CreateTime}) + fmt.Println(tb.Render()) +} diff --git a/jcsctl/cmd/package/delete.go b/jcsctl/cmd/package/delete.go new file mode 100644 index 0000000..12ce6dd --- /dev/null +++ b/jcsctl/cmd/package/delete.go @@ -0,0 +1,64 @@ +package pkg + +import ( + "fmt" + "strconv" + "strings" + + "github.com/spf13/cobra" + cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1" + clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types" + "gitlink.org.cn/cloudream/jcs-pub/jcsctl/cmd" +) + +func init() { + var opt deleteOpt + cmd := cobra.Command{ + Use: "delete /", + Aliases: []string{"del"}, + Args: cobra.ExactArgs(1), + RunE: func(c *cobra.Command, args []string) error { + ctx := cmd.GetCmdCtx(c) + return delete(c, ctx, opt, args) + }, + } + cmd.Flags().BoolVar(&opt.UseID, "id", false, "treat first argument as package ID") + PackageCmd.AddCommand(&cmd) +} + +type deleteOpt struct { + UseID bool +} + +func delete(c *cobra.Command, ctx *cmd.CommandContext, opt deleteOpt, args []string) error { + var pkgID clitypes.PackageID + if opt.UseID { + id, err := strconv.ParseInt(args[0], 10, 64) + if err != nil { + return fmt.Errorf("invalid package ID: %v", args[0]) + } + pkgID = clitypes.PackageID(id) + } else { + comps := strings.Split(args[0], "/") + if len(comps) != 2 { + return fmt.Errorf("invalid package name: %v", args[0]) + } + + getPkg, err := ctx.Client.Package().GetByFullName(cliapi.PackageGetByFullName{ + BucketName: comps[0], + PackageName: comps[1], + }) + if err != nil { + return fmt.Errorf("get package by name %v: %v", args[0], err) + } + pkgID = getPkg.Package.PackageID + } + + if err := ctx.Client.Package().Delete(cliapi.PackageDelete{ + PackageID: pkgID, + }); err != nil { + return fmt.Errorf("delete package %v: %v", pkgID, err) + } + + return nil +}