JCS-pub/client/sdk/api/v1/user_space.go

206 lines
6.8 KiB
Go

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{})
}