| @@ -1,13 +1,10 @@ | |||
| package stgsdk | |||
| import ( | |||
| "fmt" | |||
| "net/url" | |||
| "strings" | |||
| "gitlink.org.cn/cloudream/common/consts/errorcode" | |||
| myhttp "gitlink.org.cn/cloudream/common/utils/http" | |||
| "gitlink.org.cn/cloudream/common/utils/serder" | |||
| ) | |||
| type CacheMovePackageReq struct { | |||
| @@ -32,19 +29,47 @@ func (c *Client) CacheMovePackage(req CacheMovePackageReq) (*CacheMovePackageRes | |||
| return nil, err | |||
| } | |||
| contType := resp.Header.Get("Content-Type") | |||
| if strings.Contains(contType, myhttp.ContentTypeJSON) { | |||
| var codeResp response[CacheMovePackageResp] | |||
| if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { | |||
| return nil, fmt.Errorf("parsing response: %w", err) | |||
| } | |||
| jsonResp, err := myhttp.ParseJSONResponse[response[CacheMovePackageResp]](resp) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| if jsonResp.Code == errorcode.OK { | |||
| return &jsonResp.Data, nil | |||
| } | |||
| return nil, jsonResp.ToError() | |||
| } | |||
| type GetPackageObjectCacheInfosReq struct { | |||
| UserID int64 `json:"userID"` | |||
| PackageID int64 `json:"packageID"` | |||
| } | |||
| type GetPackageObjectCacheInfosResp struct { | |||
| Infos []ObjectCacheInfo `json:"cacheInfos"` | |||
| } | |||
| if codeResp.Code == errorcode.OK { | |||
| return &codeResp.Data, nil | |||
| } | |||
| func (c *Client) GetPackageObjectCacheInfos(req GetPackageObjectCacheInfosReq) (*GetPackageObjectCacheInfosResp, error) { | |||
| url, err := url.JoinPath(c.baseURL, "/cache/getPackageObjectCacheInfos") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| resp, err := myhttp.GetForm(url, myhttp.RequestParam{ | |||
| Query: req, | |||
| }) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| jsonResp, err := myhttp.ParseJSONResponse[response[GetPackageObjectCacheInfosResp]](resp) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| return nil, codeResp.ToError() | |||
| if jsonResp.Code == errorcode.OK { | |||
| return &jsonResp.Data, nil | |||
| } | |||
| return nil, fmt.Errorf("unknow response content type: %s", contType) | |||
| return nil, jsonResp.ToError() | |||
| } | |||
| @@ -129,14 +129,29 @@ func NewPackageCachingInfo(nodeInfos []NodePackageCachingInfo, packageSize int64 | |||
| } | |||
| } | |||
| type Object struct { | |||
| ObjectID int64 `db:"ObjectID" json:"objectID"` | |||
| PackageID int64 `db:"PackageID" json:"packageID"` | |||
| Path string `db:"Path" json:"path"` | |||
| Size int64 `db:"Size" json:"size,string"` | |||
| } | |||
| type Package struct { | |||
| PackageID int64 `db:"PackageID" json:"packageID"` | |||
| Name string `db:"Name" json:"name"` | |||
| BucketID int64 `db:"BucketID" json:"bucketID"` | |||
| State string `db:"State" json:"state"` | |||
| Redundancy TypedRedundancyInfo `db:"Redundancy" json:"redundancy"` | |||
| } | |||
| type ObjectCacheInfo struct { | |||
| ObjectID int64 `json:"objectID"` | |||
| Object Object `json:"object"` | |||
| FileHash string `json:"fileHash"` | |||
| } | |||
| func NewObjectCacheInfo(objectID int64, fileHash string) ObjectCacheInfo { | |||
| func NewObjectCacheInfo(object Object, fileHash string) ObjectCacheInfo { | |||
| return ObjectCacheInfo{ | |||
| ObjectID: objectID, | |||
| Object: object, | |||
| FileHash: fileHash, | |||
| } | |||
| } | |||
| @@ -12,6 +12,39 @@ import ( | |||
| "gitlink.org.cn/cloudream/common/utils/serder" | |||
| ) | |||
| type PackageGetReq struct { | |||
| UserID int64 `json:"userID"` | |||
| PackageID int64 `json:"packageID"` | |||
| } | |||
| type PackageGetResp struct { | |||
| Package | |||
| } | |||
| func (c *Client) PackageGet(req PackageGetReq) (*PackageGetResp, error) { | |||
| url, err := url.JoinPath(c.baseURL, "/package/get") | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| resp, err := myhttp.GetForm(url, myhttp.RequestParam{ | |||
| Query: req, | |||
| }) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| codeResp, err := myhttp.ParseJSONResponse[response[PackageGetResp]](resp) | |||
| if err != nil { | |||
| return nil, err | |||
| } | |||
| if codeResp.Code == errorcode.OK { | |||
| return &codeResp.Data, nil | |||
| } | |||
| return nil, codeResp.ToError() | |||
| } | |||
| type PackageUploadReq struct { | |||
| UserID int64 `json:"userID"` | |||
| BucketID int64 `json:"bucketID"` | |||
| @@ -11,6 +11,56 @@ import ( | |||
| "gitlink.org.cn/cloudream/common/pkgs/iterator" | |||
| ) | |||
| func Test_PackageGet(t *testing.T) { | |||
| Convey("上传后获取Package信息", t, func() { | |||
| cli := NewClient(&Config{ | |||
| URL: "http://localhost:7890", | |||
| }) | |||
| fileData := make([]byte, 4096) | |||
| for i := 0; i < len(fileData); i++ { | |||
| fileData[i] = byte(i) | |||
| } | |||
| pkgName := uuid.NewString() | |||
| upResp, err := cli.PackageUpload(PackageUploadReq{ | |||
| UserID: 0, | |||
| BucketID: 1, | |||
| Name: pkgName, | |||
| Redundancy: TypedRedundancyInfo{ | |||
| Type: RedundancyRep, | |||
| Info: NewRepRedundancyInfo(1), | |||
| }, | |||
| Files: iterator.Array( | |||
| &IterPackageUploadFile{ | |||
| Path: "test", | |||
| File: io.NopCloser(bytes.NewBuffer(fileData)), | |||
| }, | |||
| &IterPackageUploadFile{ | |||
| Path: "test2", | |||
| File: io.NopCloser(bytes.NewBuffer(fileData)), | |||
| }, | |||
| ), | |||
| }) | |||
| So(err, ShouldBeNil) | |||
| getResp, err := cli.PackageGet(PackageGetReq{ | |||
| UserID: 0, | |||
| PackageID: upResp.PackageID, | |||
| }) | |||
| So(err, ShouldBeNil) | |||
| So(getResp.PackageID, ShouldEqual, upResp.PackageID) | |||
| So(getResp.Package.Name, ShouldEqual, pkgName) | |||
| err = cli.PackageDelete(PackageDeleteReq{ | |||
| UserID: 0, | |||
| PackageID: upResp.PackageID, | |||
| }) | |||
| So(err, ShouldBeNil) | |||
| }) | |||
| } | |||
| func Test_Object(t *testing.T) { | |||
| Convey("上传,下载,删除", t, func() { | |||
| cli := NewClient(&Config{ | |||
| @@ -149,7 +199,14 @@ func Test_Cache(t *testing.T) { | |||
| NodeID: 1, | |||
| }) | |||
| So(err, ShouldBeNil) | |||
| So(len(cacheMoveResp.CacheInfos), ShouldEqual, 2) | |||
| cacheInfoResp, err := cli.GetPackageObjectCacheInfos(GetPackageObjectCacheInfosReq{ | |||
| UserID: 0, | |||
| PackageID: upResp.PackageID, | |||
| }) | |||
| So(err, ShouldBeNil) | |||
| So(cacheInfoResp.Infos, ShouldResemble, cacheMoveResp.CacheInfos) | |||
| err = cli.PackageDelete(PackageDeleteReq{ | |||
| UserID: 0, | |||