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.

user_space.go 7.5 kB

7 months ago
7 months ago
4 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
4 months ago
7 months ago
7 months ago
7 months ago
7 months ago
4 months ago
7 months ago
7 months ago
7 months ago
7 months ago
4 months ago
4 months ago
4 months ago
4 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. package api
  2. import (
  3. "net/http"
  4. "gitlink.org.cn/cloudream/common/sdks"
  5. jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
  6. )
  7. type UserSpaceService struct {
  8. *Client
  9. }
  10. func (c *Client) UserSpace() *UserSpaceService {
  11. return &UserSpaceService{c}
  12. }
  13. const UserSpaceDownloadPackagePath = "/userSpace/downloadPackage"
  14. type UserSpaceDownloadPackage struct {
  15. PackageID jcstypes.PackageID `json:"packageID" binding:"required"`
  16. UserSpaceID jcstypes.UserSpaceID `json:"userSpaceID" binding:"required"`
  17. RootPath string `json:"rootPath"`
  18. Concurrency int `json:"concurrency"`
  19. SaveToShards bool `json:"saveToShards"`
  20. }
  21. func (r *UserSpaceDownloadPackage) MakeParam() *sdks.RequestParam {
  22. return sdks.MakeJSONParam(http.MethodPost, UserSpaceDownloadPackagePath, r)
  23. }
  24. type UserSpaceDownloadPackageResp struct{}
  25. func (r *UserSpaceDownloadPackageResp) ParseResponse(resp *http.Response) error {
  26. return sdks.ParseCodeDataJSONResponse(resp, r)
  27. }
  28. func (c *UserSpaceService) DownloadPackage(req UserSpaceDownloadPackage) (*UserSpaceDownloadPackageResp, error) {
  29. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceDownloadPackageResp{})
  30. }
  31. const UserSpaceCreatePackagePath = "/userSpace/createPackage"
  32. type UserSpaceCreatePackageReq struct {
  33. UserSpaceID jcstypes.UserSpaceID `json:"userSpaceID" binding:"required"`
  34. Path string `json:"path" binding:"required"`
  35. BucketID jcstypes.BucketID `json:"bucketID" binding:"required"`
  36. Name string `json:"name" binding:"required"`
  37. SpaceAffinity jcstypes.UserSpaceID `json:"spaceAffinity"`
  38. }
  39. func (r *UserSpaceCreatePackageReq) MakeParam() *sdks.RequestParam {
  40. return sdks.MakeJSONParam(http.MethodPost, UserSpaceCreatePackagePath, r)
  41. }
  42. type UserSpaceCreatePackageResp struct {
  43. Package jcstypes.Package `json:"package"`
  44. }
  45. func (r *UserSpaceCreatePackageResp) ParseResponse(resp *http.Response) error {
  46. return sdks.ParseCodeDataJSONResponse(resp, r)
  47. }
  48. func (c *UserSpaceService) CreatePackage(req UserSpaceCreatePackageReq) (*UserSpaceCreatePackageResp, error) {
  49. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceCreatePackageResp{})
  50. }
  51. const UserSpaceGetPath = "/userSpace/get"
  52. type UserSpaceGet struct {
  53. UserSpaceID jcstypes.UserSpaceID `form:"userSpaceID" url:"userSpaceID" binding:"required"`
  54. }
  55. func (r *UserSpaceGet) MakeParam() *sdks.RequestParam {
  56. return sdks.MakeQueryParam(http.MethodGet, UserSpaceGetPath, r)
  57. }
  58. type UserSpaceGetResp struct {
  59. UserSpace jcstypes.UserSpace `json:"userSpace"`
  60. }
  61. func (r *UserSpaceGetResp) ParseResponse(resp *http.Response) error {
  62. return sdks.ParseCodeDataJSONResponse(resp, r)
  63. }
  64. func (c *UserSpaceService) Get(req UserSpaceGet) (*UserSpaceGetResp, error) {
  65. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetResp{})
  66. }
  67. const UserSpaceGetByNamePath = "/userSpace/getByName"
  68. type UserSpaceGetByName struct {
  69. Name string `form:"name" url:"name" binding:"required"`
  70. }
  71. func (r *UserSpaceGetByName) MakeParam() *sdks.RequestParam {
  72. return sdks.MakeQueryParam(http.MethodGet, UserSpaceGetByNamePath, r)
  73. }
  74. type UserSpaceGetByNameResp struct {
  75. UserSpace jcstypes.UserSpace `json:"userSpace"`
  76. }
  77. func (r *UserSpaceGetByNameResp) ParseResponse(resp *http.Response) error {
  78. return sdks.ParseCodeDataJSONResponse(resp, r)
  79. }
  80. func (c *UserSpaceService) GetByName(req UserSpaceGetByName) (*UserSpaceGetByNameResp, error) {
  81. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetByNameResp{})
  82. }
  83. const UserSpaceGetAllPath = "/userSpace/getAll"
  84. type UserSpaceGetAll struct{}
  85. func (r *UserSpaceGetAll) MakeParam() *sdks.RequestParam {
  86. return sdks.MakeQueryParam(http.MethodGet, UserSpaceGetAllPath, nil)
  87. }
  88. type UserSpaceGetAllResp struct {
  89. UserSpaces []jcstypes.UserSpace `json:"userSpaces"`
  90. }
  91. func (r *UserSpaceGetAllResp) ParseResponse(resp *http.Response) error {
  92. return sdks.ParseCodeDataJSONResponse(resp, r)
  93. }
  94. func (c *UserSpaceService) GetAll() (*UserSpaceGetAllResp, error) {
  95. req := UserSpaceGetAll{}
  96. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceGetAllResp{})
  97. }
  98. // 创建用户空间
  99. const UserSpaceCreatePath = "/userSpace/create"
  100. type UserSpaceCreate struct {
  101. Name string `json:"name" binding:"required"`
  102. Storage jcstypes.StorageType `json:"storage" binding:"required"`
  103. Credential jcstypes.StorageCredential `json:"credential" binding:"required"`
  104. ShardStore *jcstypes.ShardStoreUserConfig `json:"shardStore"`
  105. Features []jcstypes.StorageFeature `json:"features"`
  106. WorkingDir string `json:"workingDir"`
  107. }
  108. func (r *UserSpaceCreate) MakeParam() *sdks.RequestParam {
  109. return sdks.MakeJSONParam(http.MethodPost, UserSpaceCreatePath, r)
  110. }
  111. type UserSpaceCreateResp struct {
  112. UserSpace jcstypes.UserSpace `json:"userSpace"`
  113. }
  114. func (r *UserSpaceCreateResp) ParseResponse(resp *http.Response) error {
  115. return sdks.ParseCodeDataJSONResponse(resp, r)
  116. }
  117. func (c *UserSpaceService) Create(req UserSpaceCreate) (*UserSpaceCreateResp, error) {
  118. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceCreateResp{})
  119. }
  120. // 更新用户空间。一些重要的配置不可再二次修改
  121. const UserSpaceUpdatePath = "/userSpace/update"
  122. type UserSpaceUpdate struct {
  123. UserSpaceID jcstypes.UserSpaceID `json:"userSpaceID" binding:"required"`
  124. Name string `json:"name" binding:"required"`
  125. Credential jcstypes.StorageCredential `json:"credential" binding:"required"`
  126. Features []jcstypes.StorageFeature `json:"features"`
  127. }
  128. func (r *UserSpaceUpdate) MakeParam() *sdks.RequestParam {
  129. return sdks.MakeJSONParam(http.MethodPost, UserSpaceUpdatePath, r)
  130. }
  131. type UserSpaceUpdateResp struct {
  132. UserSpace jcstypes.UserSpace `json:"userSpace"`
  133. }
  134. func (r *UserSpaceUpdateResp) ParseResponse(resp *http.Response) error {
  135. return sdks.ParseCodeDataJSONResponse(resp, r)
  136. }
  137. func (c *UserSpaceService) Update(req UserSpaceUpdate) (*UserSpaceUpdateResp, error) {
  138. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceUpdateResp{})
  139. }
  140. // 删除用户空间
  141. const UserSpaceDeletePath = "/userSpace/delete"
  142. type UserSpaceDelete struct {
  143. UserSpaceID jcstypes.UserSpaceID `json:"userSpaceID" binding:"required"`
  144. }
  145. func (r *UserSpaceDelete) MakeParam() *sdks.RequestParam {
  146. return sdks.MakeJSONParam(http.MethodPost, UserSpaceDeletePath, r)
  147. }
  148. type UserSpaceDeleteResp struct{}
  149. func (r *UserSpaceDeleteResp) ParseResponse(resp *http.Response) error {
  150. return sdks.ParseCodeDataJSONResponse(resp, r)
  151. }
  152. func (c *UserSpaceService) Delete(req UserSpaceDelete) (*UserSpaceDeleteResp, error) {
  153. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceDeleteResp{})
  154. }
  155. // 测试给定用户空间的配置是否有效
  156. const UserSpaceTestPath = "/userSpace/test"
  157. type UserSpaceTest struct {
  158. Storage jcstypes.StorageType `json:"storage" binding:"required"`
  159. Credential jcstypes.StorageCredential `json:"credential" binding:"required"`
  160. WorikingDir string `json:"workingDir"`
  161. }
  162. func (r *UserSpaceTest) MakeParam() *sdks.RequestParam {
  163. return sdks.MakeJSONParam(http.MethodPost, UserSpaceTestPath, r)
  164. }
  165. type UserSpaceTestResp struct {
  166. // TODO 可以考虑返回WorkingDir内的文件列表
  167. }
  168. func (r *UserSpaceTestResp) ParseResponse(resp *http.Response) error {
  169. return sdks.ParseCodeDataJSONResponse(resp, r)
  170. }
  171. func (c *UserSpaceService) Test(req UserSpaceTest) (*UserSpaceTestResp, error) {
  172. return JSONAPI(&c.cfg, c.httpCli, &req, &UserSpaceTestResp{})
  173. }

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