From b90bc244dbf17615ba2a85cd7571dbcbbd284c74 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Sat, 16 Mar 2024 11:01:43 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=94=A8=E6=88=B7ID=E4=BB=8E1=E5=BC=80?= =?UTF-8?q?=E5=A7=8B=EF=BC=8C0=E4=B8=BA=E6=97=A0=E6=95=88ID?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdks/imfs/imfs_test.go | 2 +- sdks/storage/storage_test.go | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/sdks/imfs/imfs_test.go b/sdks/imfs/imfs_test.go index 22011a1..257d006 100644 --- a/sdks/imfs/imfs_test.go +++ b/sdks/imfs/imfs_test.go @@ -32,7 +32,7 @@ func Test_Package(t *testing.T) { URL: "http://localhost:7893", }) - _, err := cli.PackageGetWithObjects(PackageGetWithObjectsInfos{UserID: 0, PackageID: 13}) + _, err := cli.PackageGetWithObjects(PackageGetWithObjectsInfos{UserID: 1, PackageID: 13}) So(err, ShouldBeNil) }) } diff --git a/sdks/storage/storage_test.go b/sdks/storage/storage_test.go index 11e7115..dc6b13f 100644 --- a/sdks/storage/storage_test.go +++ b/sdks/storage/storage_test.go @@ -24,7 +24,7 @@ func Test_PackageGet(t *testing.T) { pkgName := uuid.NewString() upResp, err := cli.PackageUpload(PackageUploadReq{ - UserID: 0, + UserID: 1, BucketID: 1, Name: pkgName, Files: iterator.Array( @@ -41,7 +41,7 @@ func Test_PackageGet(t *testing.T) { So(err, ShouldBeNil) getResp, err := cli.PackageGet(PackageGetReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, }) So(err, ShouldBeNil) @@ -50,7 +50,7 @@ func Test_PackageGet(t *testing.T) { So(getResp.Package.Name, ShouldEqual, pkgName) err = cli.PackageDelete(PackageDeleteReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, }) So(err, ShouldBeNil) @@ -70,7 +70,7 @@ func Test_Object(t *testing.T) { nodeAff := NodeID(2) upResp, err := cli.PackageUpload(PackageUploadReq{ - UserID: 0, + UserID: 1, BucketID: 1, Name: uuid.NewString(), NodeAffinity: &nodeAff, @@ -88,7 +88,7 @@ func Test_Object(t *testing.T) { So(err, ShouldBeNil) // downFs, err := cli.ObjectDownload(ObjectDownloadReq{ - // UserID: 0, + // UserID: 1, // ObjectID: upResp.ObjectID, // }) // So(err, ShouldBeNil) @@ -99,7 +99,7 @@ func Test_Object(t *testing.T) { // downFs.Close() err = cli.PackageDelete(PackageDeleteReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, }) So(err, ShouldBeNil) @@ -118,7 +118,7 @@ func Test_Storage(t *testing.T) { } upResp, err := cli.PackageUpload(PackageUploadReq{ - UserID: 0, + UserID: 1, BucketID: 1, Name: uuid.NewString(), Files: iterator.Array( @@ -135,14 +135,14 @@ func Test_Storage(t *testing.T) { So(err, ShouldBeNil) _, err = cli.StorageLoadPackage(StorageLoadPackageReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, StorageID: 1, }) So(err, ShouldBeNil) err = cli.PackageDelete(PackageDeleteReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, }) So(err, ShouldBeNil) @@ -161,7 +161,7 @@ func Test_Cache(t *testing.T) { } upResp, err := cli.PackageUpload(PackageUploadReq{ - UserID: 0, + UserID: 1, BucketID: 1, Name: uuid.NewString(), Files: iterator.Array( @@ -178,14 +178,14 @@ func Test_Cache(t *testing.T) { So(err, ShouldBeNil) _, err = cli.CacheMovePackage(CacheMovePackageReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, NodeID: 1, }) So(err, ShouldBeNil) err = cli.PackageDelete(PackageDeleteReq{ - UserID: 0, + UserID: 1, PackageID: upResp.PackageID, }) So(err, ShouldBeNil) @@ -199,14 +199,14 @@ func Test_GetNodeInfos(t *testing.T) { }) resp1, err := cli.PackageGetCachedNodes(PackageGetCachedNodesReq{ PackageID: 11, - UserID: 0, + UserID: 1, }) So(err, ShouldBeNil) fmt.Printf("resp1: %v\n", resp1) resp2, err := cli.PackageGetLoadedNodes(PackageGetLoadedNodesReq{ PackageID: 11, - UserID: 0, + UserID: 1, }) So(err, ShouldBeNil) fmt.Printf("resp2: %v\n", resp2) From c4c2971237940d266a6e50263af35979eb44e4f4 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Mon, 18 Mar 2024 10:13:34 +0800 Subject: [PATCH 2/3] =?UTF-8?q?CDS=E6=8E=A5=E5=8F=A3=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdks/storage/bucket.go | 86 +++++++++++++++++++++++++++++ sdks/storage/cache.go | 2 +- sdks/storage/models.go | 8 +++ sdks/storage/object.go | 86 +++++++++++++++++++++++++++-- sdks/storage/package.go | 81 +++++++++++----------------- sdks/storage/storage_test.go | 102 +++++++++++++++++++++++------------ 6 files changed, 278 insertions(+), 87 deletions(-) create mode 100644 sdks/storage/bucket.go diff --git a/sdks/storage/bucket.go b/sdks/storage/bucket.go new file mode 100644 index 0000000..a4183a2 --- /dev/null +++ b/sdks/storage/bucket.go @@ -0,0 +1,86 @@ +package cdssdk + +import ( + "net/url" + + "gitlink.org.cn/cloudream/common/consts/errorcode" + myhttp "gitlink.org.cn/cloudream/common/utils/http" +) + +type BucketService struct { + *Client +} + +func (c *Client) Bucket() *BucketService { + return &BucketService{c} +} + +const BucketCreatePath = "/bucket/create" + +type BucketCreateReq struct { + UserID UserID `json:"userID" binding:"required"` + BucketName string `json:"bucketName" binding:"required"` +} + +type BucketCreateResp struct { + BucketID BucketID `json:"bucketID"` +} + +func (c *BucketService) Create(req BucketCreateReq) (*BucketCreateResp, error) { + url, err := url.JoinPath(c.baseURL, BucketCreatePath) + if err != nil { + return nil, err + } + + resp, err := myhttp.PostJSON(url, myhttp.RequestParam{ + Body: req, + }) + if err != nil { + return nil, err + } + + codeResp, err := myhttp.ParseJSONResponse[response[BucketCreateResp]](resp) + if err != nil { + return nil, err + } + + if codeResp.Code == errorcode.OK { + return &codeResp.Data, nil + } + + return nil, codeResp.ToError() +} + +const BucketDeletePath = "/bucket/delete" + +type BucketDeleteReq struct { + UserID UserID `json:"userID" binding:"required"` + BucketID BucketID `json:"bucketID" binding:"required"` +} + +type BucketDeleteResp struct{} + +func (c *BucketService) Delete(req BucketDeleteReq) (*BucketDeleteResp, error) { + url, err := url.JoinPath(c.baseURL, BucketDeletePath) + if err != nil { + return nil, err + } + + resp, err := myhttp.PostJSON(url, myhttp.RequestParam{ + Body: req, + }) + if err != nil { + return nil, err + } + + codeResp, err := myhttp.ParseJSONResponse[response[BucketDeleteResp]](resp) + if err != nil { + return nil, err + } + + if codeResp.Code == errorcode.OK { + return &codeResp.Data, nil + } + + return nil, codeResp.ToError() +} diff --git a/sdks/storage/cache.go b/sdks/storage/cache.go index a6866a1..e7574dd 100644 --- a/sdks/storage/cache.go +++ b/sdks/storage/cache.go @@ -7,7 +7,7 @@ import ( myhttp "gitlink.org.cn/cloudream/common/utils/http" ) -var CacheMovePackagePath = "/cache/movePackage" +const CacheMovePackagePath = "/cache/movePackage" type CacheMovePackageReq struct { UserID UserID `json:"userID"` diff --git a/sdks/storage/models.go b/sdks/storage/models.go index 577479b..e4cc3d8 100644 --- a/sdks/storage/models.go +++ b/sdks/storage/models.go @@ -112,6 +112,8 @@ type Object struct { Size int64 `db:"Size" json:"size,string"` FileHash string `db:"FileHash" json:"fileHash"` Redundancy Redundancy `db:"Redundancy" json:"redundancy"` + CreateTime time.Time `db:"CreateTime" json:"createTime"` + UpdateTime time.Time `db:"UpdateTime" json:"updateTime"` } type Node struct { @@ -132,6 +134,12 @@ type PinnedObject struct { CreateTime time.Time `db:"CreateTime" json:"createTime"` } +type Bucket struct { + BucketID BucketID `db:"BucketID" json:"bucketID"` + Name string `db:"Name" json:"name"` + CreatorID UserID `db:"CreatorID" json:"creatorID"` +} + type NodePackageCachingInfo struct { NodeID NodeID `json:"nodeID"` FileSize int64 `json:"fileSize"` diff --git a/sdks/storage/object.go b/sdks/storage/object.go index 81fb5d7..abbefd4 100644 --- a/sdks/storage/object.go +++ b/sdks/storage/object.go @@ -7,17 +7,95 @@ import ( "strings" "gitlink.org.cn/cloudream/common/consts/errorcode" + "gitlink.org.cn/cloudream/common/pkgs/iterator" myhttp "gitlink.org.cn/cloudream/common/utils/http" "gitlink.org.cn/cloudream/common/utils/serder" ) +type ObjectService struct { + *Client +} + +func (c *Client) Object() *ObjectService { + return &ObjectService{ + Client: c, + } +} + +const ObjectUploadPath = "/object/upload" + +type ObjectUploadReq struct { + ObjectUploadInfo + Files UploadObjectIterator `json:"-"` +} + +type ObjectUploadInfo struct { + UserID UserID `json:"userID" binding:"required"` + PackageID PackageID `json:"packageID" binding:"required"` + NodeAffinity *NodeID `json:"nodeAffinity"` +} + +type IterObjectUpload struct { + Path string + File io.ReadCloser +} + +type UploadObjectIterator = iterator.Iterator[*IterObjectUpload] + +type ObjectUploadResp struct{} + +func (c *ObjectService) Upload(req ObjectUploadReq) (*ObjectUploadResp, error) { + url, err := url.JoinPath(c.baseURL, ObjectUploadPath) + if err != nil { + return nil, err + } + + infoJSON, err := serder.ObjectToJSON(req) + if err != nil { + return nil, fmt.Errorf("upload info to json: %w", err) + } + + resp, err := myhttp.PostMultiPart(url, myhttp.MultiPartRequestParam{ + Form: map[string]string{"info": string(infoJSON)}, + Files: iterator.Map(req.Files, func(src *IterObjectUpload) (*myhttp.IterMultiPartFile, error) { + return &myhttp.IterMultiPartFile{ + FieldName: "files", + FileName: src.Path, + File: src.File, + }, nil + }), + }) + if err != nil { + return nil, err + } + + contType := resp.Header.Get("Content-Type") + if strings.Contains(contType, myhttp.ContentTypeJSON) { + var codeResp response[ObjectUploadResp] + if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { + return nil, fmt.Errorf("parsing response: %w", err) + } + + if codeResp.Code == errorcode.OK { + return &codeResp.Data, nil + } + + return nil, codeResp.ToError() + } + + return nil, fmt.Errorf("unknow response content type: %s", contType) + +} + +const ObjectDownloadPath = "/object/download" + type ObjectDownloadReq struct { UserID int64 `json:"userID"` ObjectID int64 `json:"objectID"` } -func (c *Client) ObjectDownload(req ObjectDownloadReq) (io.ReadCloser, error) { - url, err := url.JoinPath(c.baseURL, "/object/download") +func (c *ObjectService) Download(req ObjectDownloadReq) (io.ReadCloser, error) { + url, err := url.JoinPath(c.baseURL, ObjectDownloadPath) if err != nil { return nil, err } @@ -47,7 +125,7 @@ func (c *Client) ObjectDownload(req ObjectDownloadReq) (io.ReadCloser, error) { return nil, fmt.Errorf("unknow response content type: %s", contType) } -var ObjectGetPackageObjectsPath = "/object/getPackageObjects" +const ObjectGetPackageObjectsPath = "/object/getPackageObjects" type ObjectGetPackageObjectsReq struct { UserID UserID `json:"userID"` @@ -57,7 +135,7 @@ type ObjectGetPackageObjectsResp struct { Objects []Object `json:"objects"` } -func (c *Client) ObjectGetPackageObjects(req ObjectGetPackageObjectsReq) (*ObjectGetPackageObjectsResp, error) { +func (c *ObjectService) GetPackageObjects(req ObjectGetPackageObjectsReq) (*ObjectGetPackageObjectsResp, error) { url, err := url.JoinPath(c.baseURL, ObjectGetPackageObjectsPath) if err != nil { return nil, err diff --git a/sdks/storage/package.go b/sdks/storage/package.go index c264a21..26a8931 100644 --- a/sdks/storage/package.go +++ b/sdks/storage/package.go @@ -2,16 +2,24 @@ package cdssdk import ( "fmt" - "io" "net/url" "strings" "gitlink.org.cn/cloudream/common/consts/errorcode" - "gitlink.org.cn/cloudream/common/pkgs/iterator" myhttp "gitlink.org.cn/cloudream/common/utils/http" "gitlink.org.cn/cloudream/common/utils/serder" ) +type PackageService struct { + *Client +} + +func (c *Client) Package() *PackageService { + return &PackageService{c} +} + +const PackageGetPath = "/package/get" + type PackageGetReq struct { UserID UserID `json:"userID"` PackageID PackageID `json:"packageID"` @@ -20,8 +28,8 @@ type PackageGetResp struct { Package } -func (c *Client) PackageGet(req PackageGetReq) (*PackageGetResp, error) { - url, err := url.JoinPath(c.baseURL, "/package/get") +func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) { + url, err := url.JoinPath(c.baseURL, PackageGetPath) if err != nil { return nil, err } @@ -45,66 +53,41 @@ func (c *Client) PackageGet(req PackageGetReq) (*PackageGetResp, error) { return nil, codeResp.ToError() } -type PackageUploadReq struct { - UserID UserID `json:"userID"` - BucketID BucketID `json:"bucketID"` - Name string `json:"name"` - NodeAffinity *NodeID `json:"nodeAffinity"` - Files PackageUploadFileIterator `json:"-"` -} +const PackageCreatePath = "/package/create" -type IterPackageUploadFile struct { - Path string - File io.ReadCloser +type PackageCreateReq struct { + UserID UserID `json:"userID"` + BucketID BucketID `json:"bucketID"` + Name string `json:"name"` } -type PackageUploadFileIterator = iterator.Iterator[*IterPackageUploadFile] - -type PackageUploadResp struct { +type PackageCreateResp struct { PackageID PackageID `json:"packageID,string"` } -func (c *Client) PackageUpload(req PackageUploadReq) (*PackageUploadResp, error) { - url, err := url.JoinPath(c.baseURL, "/package/upload") +func (s *PackageService) Create(req PackageCreateReq) (*PackageCreateResp, error) { + url, err := url.JoinPath(s.baseURL, PackageCreatePath) if err != nil { return nil, err } - infoJSON, err := serder.ObjectToJSON(req) - if err != nil { - return nil, fmt.Errorf("package info to json: %w", err) - } - - resp, err := myhttp.PostMultiPart(url, myhttp.MultiPartRequestParam{ - Form: map[string]string{"info": string(infoJSON)}, - Files: iterator.Map(req.Files, func(src *IterPackageUploadFile) (*myhttp.IterMultiPartFile, error) { - return &myhttp.IterMultiPartFile{ - FieldName: "files", - FileName: src.Path, - File: src.File, - }, nil - }), + resp, err := myhttp.PostJSON(url, myhttp.RequestParam{ + Body: req, }) if err != nil { return nil, err } - contType := resp.Header.Get("Content-Type") - if strings.Contains(contType, myhttp.ContentTypeJSON) { - var codeResp response[PackageUploadResp] - if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil { - return nil, fmt.Errorf("parsing response: %w", err) - } - - if codeResp.Code == errorcode.OK { - return &codeResp.Data, nil - } - - return nil, codeResp.ToError() + codeResp, err := myhttp.ParseJSONResponse[response[PackageCreateResp]](resp) + if err != nil { + return nil, err } - return nil, fmt.Errorf("unknow response content type: %s", contType) + if codeResp.Code == errorcode.OK { + return &codeResp.Data, nil + } + return nil, codeResp.ToError() } type PackageDeleteReq struct { @@ -112,7 +95,7 @@ type PackageDeleteReq struct { PackageID PackageID `json:"packageID"` } -func (c *Client) PackageDelete(req PackageDeleteReq) error { +func (c *PackageService) Delete(req PackageDeleteReq) error { url, err := url.JoinPath(c.baseURL, "/package/delete") if err != nil { return err @@ -152,7 +135,7 @@ type PackageGetCachedNodesResp struct { PackageCachingInfo } -func (c *Client) PackageGetCachedNodes(req PackageGetCachedNodesReq) (*PackageGetCachedNodesResp, error) { +func (c *PackageService) GetCachedNodes(req PackageGetCachedNodesReq) (*PackageGetCachedNodesResp, error) { url, err := url.JoinPath(c.baseURL, "/package/getCachedNodes") if err != nil { return nil, err @@ -190,7 +173,7 @@ type PackageGetLoadedNodesResp struct { NodeIDs []NodeID `json:"nodeIDs"` } -func (c *Client) PackageGetLoadedNodes(req PackageGetLoadedNodesReq) (*PackageGetLoadedNodesResp, error) { +func (c *PackageService) GetLoadedNodes(req PackageGetLoadedNodesReq) (*PackageGetLoadedNodesResp, error) { url, err := url.JoinPath(c.baseURL, "/package/getLoadedNodes") if err != nil { return nil, err diff --git a/sdks/storage/storage_test.go b/sdks/storage/storage_test.go index dc6b13f..5521a47 100644 --- a/sdks/storage/storage_test.go +++ b/sdks/storage/storage_test.go @@ -23,16 +23,24 @@ func Test_PackageGet(t *testing.T) { } pkgName := uuid.NewString() - upResp, err := cli.PackageUpload(PackageUploadReq{ + createResp, err := cli.Package().Create(PackageCreateReq{ UserID: 1, BucketID: 1, Name: pkgName, + }) + So(err, ShouldBeNil) + + _, err = cli.Object().Upload(ObjectUploadReq{ + ObjectUploadInfo: ObjectUploadInfo{ + UserID: 1, + PackageID: createResp.PackageID, + }, Files: iterator.Array( - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test", File: io.NopCloser(bytes.NewBuffer(fileData)), }, - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test2", File: io.NopCloser(bytes.NewBuffer(fileData)), }, @@ -40,18 +48,18 @@ func Test_PackageGet(t *testing.T) { }) So(err, ShouldBeNil) - getResp, err := cli.PackageGet(PackageGetReq{ + getResp, err := cli.Package().Get(PackageGetReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, }) So(err, ShouldBeNil) - So(getResp.PackageID, ShouldEqual, upResp.PackageID) + So(getResp.PackageID, ShouldEqual, createResp.PackageID) So(getResp.Package.Name, ShouldEqual, pkgName) - err = cli.PackageDelete(PackageDeleteReq{ + err = cli.Package().Delete(PackageDeleteReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, }) So(err, ShouldBeNil) }) @@ -69,17 +77,27 @@ func Test_Object(t *testing.T) { } nodeAff := NodeID(2) - upResp, err := cli.PackageUpload(PackageUploadReq{ - UserID: 1, - BucketID: 1, - Name: uuid.NewString(), - NodeAffinity: &nodeAff, + + pkgName := uuid.NewString() + createResp, err := cli.Package().Create(PackageCreateReq{ + UserID: 1, + BucketID: 1, + Name: pkgName, + }) + So(err, ShouldBeNil) + + _, err = cli.Object().Upload(ObjectUploadReq{ + ObjectUploadInfo: ObjectUploadInfo{ + UserID: 1, + PackageID: createResp.PackageID, + NodeAffinity: &nodeAff, + }, Files: iterator.Array( - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test", File: io.NopCloser(bytes.NewBuffer(fileData)), }, - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test2", File: io.NopCloser(bytes.NewBuffer(fileData)), }, @@ -98,9 +116,9 @@ func Test_Object(t *testing.T) { // So(downFileData, ShouldResemble, fileData) // downFs.Close() - err = cli.PackageDelete(PackageDeleteReq{ + err = cli.Package().Delete(PackageDeleteReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, }) So(err, ShouldBeNil) }) @@ -117,16 +135,25 @@ func Test_Storage(t *testing.T) { fileData[i] = byte(i) } - upResp, err := cli.PackageUpload(PackageUploadReq{ + pkgName := uuid.NewString() + createResp, err := cli.Package().Create(PackageCreateReq{ UserID: 1, BucketID: 1, - Name: uuid.NewString(), + Name: pkgName, + }) + So(err, ShouldBeNil) + + _, err = cli.Object().Upload(ObjectUploadReq{ + ObjectUploadInfo: ObjectUploadInfo{ + UserID: 1, + PackageID: createResp.PackageID, + }, Files: iterator.Array( - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test", File: io.NopCloser(bytes.NewBuffer(fileData)), }, - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test2", File: io.NopCloser(bytes.NewBuffer(fileData)), }, @@ -136,14 +163,14 @@ func Test_Storage(t *testing.T) { _, err = cli.StorageLoadPackage(StorageLoadPackageReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, StorageID: 1, }) So(err, ShouldBeNil) - err = cli.PackageDelete(PackageDeleteReq{ + err = cli.Package().Delete(PackageDeleteReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, }) So(err, ShouldBeNil) }) @@ -160,16 +187,25 @@ func Test_Cache(t *testing.T) { fileData[i] = byte(i) } - upResp, err := cli.PackageUpload(PackageUploadReq{ + pkgName := uuid.NewString() + createResp, err := cli.Package().Create(PackageCreateReq{ UserID: 1, BucketID: 1, - Name: uuid.NewString(), + Name: pkgName, + }) + So(err, ShouldBeNil) + + _, err = cli.Object().Upload(ObjectUploadReq{ + ObjectUploadInfo: ObjectUploadInfo{ + UserID: 1, + PackageID: createResp.PackageID, + }, Files: iterator.Array( - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test.txt", File: io.NopCloser(bytes.NewBuffer(fileData)), }, - &IterPackageUploadFile{ + &IterObjectUpload{ Path: "test2.txt", File: io.NopCloser(bytes.NewBuffer(fileData)), }, @@ -179,14 +215,14 @@ func Test_Cache(t *testing.T) { _, err = cli.CacheMovePackage(CacheMovePackageReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, NodeID: 1, }) So(err, ShouldBeNil) - err = cli.PackageDelete(PackageDeleteReq{ + err = cli.Package().Delete(PackageDeleteReq{ UserID: 1, - PackageID: upResp.PackageID, + PackageID: createResp.PackageID, }) So(err, ShouldBeNil) }) @@ -197,14 +233,14 @@ func Test_GetNodeInfos(t *testing.T) { cli := NewClient(&Config{ URL: "http://localhost:7890", }) - resp1, err := cli.PackageGetCachedNodes(PackageGetCachedNodesReq{ + resp1, err := cli.Package().GetCachedNodes(PackageGetCachedNodesReq{ PackageID: 11, UserID: 1, }) So(err, ShouldBeNil) fmt.Printf("resp1: %v\n", resp1) - resp2, err := cli.PackageGetLoadedNodes(PackageGetLoadedNodesReq{ + resp2, err := cli.Package().GetLoadedNodes(PackageGetLoadedNodesReq{ PackageID: 11, UserID: 1, }) From f1c92e601fdc2e110fc6f51960b3938839fd2b80 Mon Sep 17 00:00:00 2001 From: Sydonian <794346190@qq.com> Date: Wed, 20 Mar 2024 09:48:56 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E8=8A=82=E7=82=B9=E9=97=B4=E5=BB=B6=E8=BF=9F=E7=9A=84=E6=9C=BA?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sdks/storage/models.go | 7 +++++++ utils/sort2/sort.go | 8 ++++++++ 2 files changed, 15 insertions(+) diff --git a/sdks/storage/models.go b/sdks/storage/models.go index e4cc3d8..0ad6b81 100644 --- a/sdks/storage/models.go +++ b/sdks/storage/models.go @@ -140,6 +140,13 @@ type Bucket struct { CreatorID UserID `db:"CreatorID" json:"creatorID"` } +type NodeConnectivity struct { + FromNodeID NodeID `db:"FromNodeID" json:"fromNodeID"` + ToNodeID NodeID `db:"ToNodeID" json:"ToNodeID"` + Delay *float32 `db:"Delay" json:"delay"` + TestTime time.Time `db:"TestTime" json:"testTime"` +} + type NodePackageCachingInfo struct { NodeID NodeID `json:"nodeID"` FileSize int64 `json:"fileSize"` diff --git a/utils/sort2/sort.go b/utils/sort2/sort.go index d594352..9967fa8 100644 --- a/utils/sort2/sort.go +++ b/utils/sort2/sort.go @@ -36,6 +36,14 @@ func Sort[T any](arr []T, cmp Comparer[T]) []T { return arr } +func SortAsc[T constraints.Ordered](arr []T) []T { + return Sort(arr, Cmp[T]) +} + +func SortDesc[T constraints.Ordered](arr []T) []T { + return Sort(arr, func(left, right T) int { return Cmp(right, left) }) +} + // false < true func CmpBool(left, right bool) int { leftVal := 0