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

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