You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

package.go 6.7 kB

7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. package api
  2. import (
  3. "fmt"
  4. "net/http"
  5. "net/url"
  6. "gitlink.org.cn/cloudream/common/consts/errorcode"
  7. "gitlink.org.cn/cloudream/common/pkgs/iterator"
  8. "gitlink.org.cn/cloudream/common/sdks"
  9. "gitlink.org.cn/cloudream/common/utils/http2"
  10. "gitlink.org.cn/cloudream/common/utils/serder"
  11. clitypes "gitlink.org.cn/cloudream/storage2/client/types"
  12. )
  13. type PackageService struct {
  14. *Client
  15. }
  16. func (c *Client) Package() *PackageService {
  17. return &PackageService{c}
  18. }
  19. const PackageGetPath = "/package/get"
  20. type PackageGetReq struct {
  21. PackageID clitypes.PackageID `form:"packageID" url:"packageID" binding:"required"`
  22. }
  23. func (r *PackageGetReq) MakeParam() *sdks.RequestParam {
  24. return sdks.MakeQueryParam(http.MethodGet, PackageGetPath, r)
  25. }
  26. type PackageGetResp struct {
  27. clitypes.Package
  28. }
  29. func (r *PackageGetResp) ParseResponse(resp *http.Response) error {
  30. return sdks.ParseCodeDataJSONResponse(resp, r)
  31. }
  32. func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) {
  33. return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageGetResp{})
  34. }
  35. const PackageGetByFullNamePath = "/package/getByFullName"
  36. type PackageGetByFullName struct {
  37. BucketName string `form:"bucketName" url:"bucketName" binding:"required"`
  38. PackageName string `form:"packageName" url:"packageName" binding:"required"`
  39. }
  40. func (r *PackageGetByFullName) MakeParam() *sdks.RequestParam {
  41. return sdks.MakeQueryParam(http.MethodGet, PackageGetByFullNamePath, r)
  42. }
  43. type PackageGetByFullNameResp struct {
  44. Package clitypes.Package `json:"package"`
  45. }
  46. func (r *PackageGetByFullNameResp) ParseResponse(resp *http.Response) error {
  47. return sdks.ParseCodeDataJSONResponse(resp, r)
  48. }
  49. func (c *PackageService) GetByName(req PackageGetByFullName) (*PackageGetByFullNameResp, error) {
  50. return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageGetByFullNameResp{})
  51. }
  52. const PackageCreatePath = "/package/create"
  53. type PackageCreate struct {
  54. BucketID clitypes.BucketID `json:"bucketID"`
  55. Name string `json:"name"`
  56. }
  57. func (r *PackageCreate) MakeParam() *sdks.RequestParam {
  58. return sdks.MakeJSONParam(http.MethodPost, PackageCreatePath, r)
  59. }
  60. type PackageCreateResp struct {
  61. Package clitypes.Package `json:"package"`
  62. }
  63. func (r *PackageCreateResp) ParseResponse(resp *http.Response) error {
  64. return sdks.ParseCodeDataJSONResponse(resp, r)
  65. }
  66. func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) {
  67. return JSONAPI(s.cfg, http.DefaultClient, &req, &PackageCreateResp{})
  68. }
  69. const PackageCreateLoadPath = "/package/createLoad"
  70. type PackageCreateLoad struct {
  71. PackageCreateLoadInfo
  72. Files UploadObjectIterator `json:"-"`
  73. }
  74. type PackageCreateLoadInfo struct {
  75. BucketID clitypes.BucketID `json:"bucketID" binding:"required"`
  76. Name string `json:"name" binding:"required"`
  77. LoadTo []clitypes.UserSpaceID `json:"loadTo"`
  78. LoadToPath []string `json:"loadToPath"`
  79. }
  80. type PackageCreateLoadResp struct {
  81. Package clitypes.Package `json:"package"`
  82. Objects []clitypes.Object `json:"objects"`
  83. }
  84. func (c *PackageService) CreateLoad(req PackageCreateLoad) (*PackageCreateLoadResp, error) {
  85. url, err := url.JoinPath(c.cfg.URL, PackageCreateLoadPath)
  86. if err != nil {
  87. return nil, err
  88. }
  89. infoJSON, err := serder.ObjectToJSON(req)
  90. if err != nil {
  91. return nil, fmt.Errorf("upload info to json: %w", err)
  92. }
  93. resp, err := PostMultiPart(c.cfg, url,
  94. map[string]string{"info": string(infoJSON)},
  95. iterator.Map(req.Files, func(src *UploadingObject) (*http2.IterMultiPartFile, error) {
  96. return &http2.IterMultiPartFile{
  97. FieldName: "files",
  98. FileName: src.Path,
  99. File: src.File,
  100. }, nil
  101. }))
  102. if err != nil {
  103. return nil, err
  104. }
  105. codeResp, err := ParseJSONResponse[response[PackageCreateLoadResp]](resp)
  106. if err != nil {
  107. return nil, err
  108. }
  109. if codeResp.Code == errorcode.OK {
  110. return &codeResp.Data, nil
  111. }
  112. return nil, codeResp.ToError()
  113. }
  114. const PackageDeletePath = "/package/delete"
  115. type PackageDelete struct {
  116. PackageID clitypes.PackageID `json:"packageID" binding:"required"`
  117. }
  118. func (r *PackageDelete) MakeParam() *sdks.RequestParam {
  119. return sdks.MakeJSONParam(http.MethodPost, PackageDeletePath, r)
  120. }
  121. type PackageDeleteResp struct{}
  122. func (r *PackageDeleteResp) ParseResponse(resp *http.Response) error {
  123. return sdks.ParseCodeDataJSONResponse(resp, r)
  124. }
  125. func (c *PackageService) Delete(req PackageDelete) error {
  126. return JSONAPINoData(c.cfg, http.DefaultClient, &req)
  127. }
  128. const PackageClonePath = "/package/clone"
  129. type PackageClone struct {
  130. PackageID clitypes.PackageID `json:"packageID" binding:"required"`
  131. BucketID clitypes.BucketID `json:"bucketID" binding:"required"`
  132. Name string `json:"name" binding:"required"`
  133. }
  134. func (r *PackageClone) MakeParam() *sdks.RequestParam {
  135. return sdks.MakeJSONParam(http.MethodPost, PackageClonePath, r)
  136. }
  137. type PackageCloneResp struct {
  138. Package clitypes.Package `json:"package"`
  139. }
  140. func (r *PackageCloneResp) ParseResponse(resp *http.Response) error {
  141. return sdks.ParseCodeDataJSONResponse(resp, r)
  142. }
  143. func (c *PackageService) Clone(req PackageClone) (*PackageCloneResp, error) {
  144. return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageCloneResp{})
  145. }
  146. const PackageListBucketPackagesPath = "/package/listBucketPackages"
  147. type PackageListBucketPackages struct {
  148. BucketID clitypes.BucketID `form:"bucketID" url:"bucketID" binding:"required"`
  149. }
  150. func (r *PackageListBucketPackages) MakeParam() *sdks.RequestParam {
  151. return sdks.MakeQueryParam(http.MethodGet, PackageListBucketPackagesPath, r)
  152. }
  153. type PackageListBucketPackagesResp struct {
  154. Packages []clitypes.Package `json:"packages"`
  155. }
  156. func (r *PackageListBucketPackagesResp) ParseResponse(resp *http.Response) error {
  157. return sdks.ParseCodeDataJSONResponse(resp, r)
  158. }
  159. func (c *PackageService) ListBucketPackages(req PackageListBucketPackages) (*PackageListBucketPackagesResp, error) {
  160. return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageListBucketPackagesResp{})
  161. }
  162. const PackageGetCachedStoragesPath = "/package/getCachedStorages"
  163. type PackageGetCachedStoragesReq struct {
  164. PackageID clitypes.PackageID `form:"packageID" url:"packageID" binding:"required"`
  165. }
  166. func (r *PackageGetCachedStoragesReq) MakeParam() *sdks.RequestParam {
  167. return sdks.MakeQueryParam(http.MethodGet, PackageGetCachedStoragesPath, r)
  168. }
  169. /*
  170. type PackageGetCachedStoragesResp struct {
  171. cdssdk.PackageCachingInfo
  172. }
  173. func (r *PackageGetCachedStoragesResp) ParseResponse(resp *http.Response) error {
  174. return sdks.ParseCodeDataJSONResponse(resp, r)
  175. }
  176. func (c *PackageService) GetCachedStorages(req PackageGetCachedStoragesReq) (*PackageGetCachedStoragesResp, error) {
  177. return JSONAPI(c.cfg, http.DefaultClient, &req, &PackageGetCachedStoragesResp{})
  178. }
  179. */

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。