206 lines
6.8 KiB
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{})
|
|
}
|