package api import ( "net/http" "gitlink.org.cn/cloudream/common/sdks" clitypes "gitlink.org.cn/cloudream/jcs-pub/client/types" cortypes "gitlink.org.cn/cloudream/jcs-pub/coordinator/types" ) const UserSpaceDownloadPackagePath = "/userspace/downloadPackage" type UserSpaceDownloadPackageReq struct { PackageID clitypes.PackageID `json:"packageID" binding:"required"` UserSpaceID clitypes.UserSpaceID `json:"userSpaceID" binding:"required"` RootPath string `json:"rootPath"` } func (r *UserSpaceDownloadPackageReq) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceDownloadPackagePath, r) } type UserSpaceDownloadPackageResp struct{} func (r *UserSpaceDownloadPackageResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceDownloadPackage(req UserSpaceDownloadPackageReq) (*UserSpaceDownloadPackageResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceDownloadPackageResp{}) } const UserSpaceCreatePackagePath = "/userspace/createPackage" type UserSpaceCreatePackageReq struct { UserSpaceID clitypes.UserSpaceID `json:"userSpaceID" binding:"required"` Path string `json:"path" binding:"required"` BucketID clitypes.BucketID `json:"bucketID" binding:"required"` Name string `json:"name" binding:"required"` SpaceAffinity clitypes.UserSpaceID `json:"spaceAffinity"` } func (r *UserSpaceCreatePackageReq) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceCreatePackagePath, r) } type UserSpaceCreatePackageResp struct { Package clitypes.Package `json:"package"` } func (r *UserSpaceCreatePackageResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceCreatePackage(req UserSpaceCreatePackageReq) (*UserSpaceCreatePackageResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceCreatePackageResp{}) } const UserSpaceGetPath = "/userspace/get" type UserSpaceGet struct { UserSpaceID clitypes.UserSpaceID `form:"userSpaceID" url:"userSpaceID" binding:"required"` } func (r *UserSpaceGet) MakeParam() *sdks.RequestParam { return sdks.MakeQueryParam(http.MethodGet, UserSpaceGetPath, r) } type UserSpaceGetResp struct { clitypes.UserSpace } func (r *UserSpaceGetResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceGet(req UserSpaceGet) (*UserSpaceGetResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetResp{}) } // 创建用户空间 const UserSpaceCreatePath = "/userspace/create" type UserSpaceCreate struct { Name string `json:"name" binding:"required"` Storage cortypes.StorageType `json:"storage" binding:"required"` Credential cortypes.StorageCredential `json:"credential" binding:"required"` ShardStore *cortypes.ShardStoreUserConfig `json:"shardStore"` Features []cortypes.StorageFeature `json:"features"` WorkingDir string `json:"workingDir"` } func (r *UserSpaceCreate) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceCreatePath, r) } type UserSpaceCreateResp struct { clitypes.UserSpace } func (r *UserSpaceCreateResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceCreate(req UserSpaceCreate) (*UserSpaceCreateResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceCreateResp{}) } // 更新用户空间。一些重要的配置不可再二次修改 const UserSpaceUpdatePath = "/userspace/update" type UserSpaceUpdate struct { UserSpaceID clitypes.UserSpaceID `json:"userSpaceID" binding:"required"` Name string `json:"name" binding:"required"` Credential cortypes.StorageCredential `json:"credential" binding:"required"` Features []cortypes.StorageFeature `json:"features"` } func (r *UserSpaceUpdate) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceUpdatePath, r) } type UserSpaceUpdateResp struct { clitypes.UserSpace } func (r *UserSpaceUpdateResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceUpdate(req UserSpaceUpdate) (*UserSpaceUpdateResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceUpdateResp{}) } // 删除用户空间 const UserSpaceDeletePath = "/userspace/delete" type UserSpaceDelete struct { UserSpaceID clitypes.UserSpaceID `json:"userSpaceID" binding:"required"` } func (r *UserSpaceDelete) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceDeletePath, r) } type UserSpaceDeleteResp struct{} func (r *UserSpaceDeleteResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceDelete(req UserSpaceDelete) (*UserSpaceDeleteResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceDeleteResp{}) } // 测试给定用户空间的配置是否有效 const UserSpaceTestPath = "/userspace/test" type UserSpaceTest struct { Storage cortypes.StorageType `json:"storage" binding:"required"` Credential cortypes.StorageCredential `json:"credential" binding:"required"` WorikingDir string `json:"workingDir"` } func (r *UserSpaceTest) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceTestPath, r) } type UserSpaceTestResp struct { // TODO 可以考虑返回WorkingDir内的文件列表 } func (r *UserSpaceTestResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceTest(req UserSpaceTest) (*UserSpaceTestResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceTestResp{}) } // 存储服务间直传 const UserSpaceSpaceToSpacePath = "/userspace/spaceToSpace" type UserSpaceSpaceToSpace struct { SrcUserSpaceID clitypes.UserSpaceID `json:"srcUserSpaceID" binding:"required"` DstUserSpaceID clitypes.UserSpaceID `json:"dstUserSpaceID" binding:"required"` SrcPath string `json:"srcPath" binding:"required"` DstPath string `json:"dstPath" binding:"required"` } func (r *UserSpaceSpaceToSpace) MakeParam() *sdks.RequestParam { return sdks.MakeJSONParam(http.MethodPost, UserSpaceSpaceToSpacePath, r) } type UserSpaceSpaceToSpaceResp struct { clitypes.SpaceToSpaceResult } func (r *UserSpaceSpaceToSpaceResp) ParseResponse(resp *http.Response) error { return sdks.ParseCodeDataJSONResponse(resp, r) } func (c *Client) UserSpaceSpaceToSpace(req UserSpaceSpaceToSpace) (*UserSpaceSpaceToSpaceResp, error) { return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceSpaceToSpaceResp{}) }