diff --git a/sdks/storage/cache.go b/sdks/storage/cache.go index e2e3229..f0b8d46 100644 --- a/sdks/storage/cache.go +++ b/sdks/storage/cache.go @@ -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() } diff --git a/sdks/storage/models.go b/sdks/storage/models.go index 91ff60a..cdd0afe 100644 --- a/sdks/storage/models.go +++ b/sdks/storage/models.go @@ -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, } } diff --git a/sdks/storage/package.go b/sdks/storage/package.go index d111a65..4462cb0 100644 --- a/sdks/storage/package.go +++ b/sdks/storage/package.go @@ -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"` diff --git a/sdks/storage/storage_test.go b/sdks/storage/storage_test.go index 68fbc45..2b6d3dc 100644 --- a/sdks/storage/storage_test.go +++ b/sdks/storage/storage_test.go @@ -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,