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.

storage.go 3.3 kB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package cdssdk
  2. import (
  3. "fmt"
  4. "net/url"
  5. "strings"
  6. "gitlink.org.cn/cloudream/common/consts/errorcode"
  7. "gitlink.org.cn/cloudream/common/utils/http2"
  8. "gitlink.org.cn/cloudream/common/utils/serder"
  9. )
  10. const StorageLoadPackagePath = "/storage/loadPackage"
  11. type StorageLoadPackageReq struct {
  12. UserID UserID `json:"userID" binding:"required"`
  13. PackageID PackageID `json:"packageID" binding:"required"`
  14. StorageID StorageID `json:"storageID" binding:"required"`
  15. }
  16. type StorageLoadPackageResp struct {
  17. FullPath string `json:"fullPath"` // TODO 临时保留给中期测试的前端使用,后续会删除
  18. PackagePath string `json:"packagePath"`
  19. LocalBase string `json:"localBase"`
  20. RemoteBase string `json:"remoteBase"`
  21. }
  22. func (c *Client) StorageLoadPackage(req StorageLoadPackageReq) (*StorageLoadPackageResp, error) {
  23. url, err := url.JoinPath(c.baseURL, StorageLoadPackagePath)
  24. if err != nil {
  25. return nil, err
  26. }
  27. resp, err := http2.PostJSON(url, http2.RequestParam{
  28. Body: req,
  29. })
  30. if err != nil {
  31. return nil, err
  32. }
  33. codeResp, err := ParseJSONResponse[response[StorageLoadPackageResp]](resp)
  34. if err != nil {
  35. return nil, err
  36. }
  37. if codeResp.Code == errorcode.OK {
  38. return &codeResp.Data, nil
  39. }
  40. return nil, codeResp.ToError()
  41. }
  42. const StorageCreatePackagePath = "/storage/createPackage"
  43. type StorageCreatePackageReq struct {
  44. UserID UserID `json:"userID" binding:"required"`
  45. StorageID StorageID `json:"storageID" binding:"required"`
  46. Path string `json:"path" binding:"required"`
  47. BucketID BucketID `json:"bucketID" binding:"required"`
  48. Name string `json:"name" binding:"required"`
  49. NodeAffinity *NodeID `json:"nodeAffinity"`
  50. }
  51. type StorageCreatePackageResp struct {
  52. PackageID PackageID `json:"packageID"`
  53. }
  54. func (c *Client) StorageCreatePackage(req StorageCreatePackageReq) (*StorageCreatePackageResp, error) {
  55. url, err := url.JoinPath(c.baseURL, StorageCreatePackagePath)
  56. if err != nil {
  57. return nil, err
  58. }
  59. resp, err := http2.PostJSON(url, http2.RequestParam{
  60. Body: req,
  61. })
  62. if err != nil {
  63. return nil, err
  64. }
  65. contType := resp.Header.Get("Content-Type")
  66. if strings.Contains(contType, http2.ContentTypeJSON) {
  67. var codeResp response[StorageCreatePackageResp]
  68. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  69. return nil, fmt.Errorf("parsing response: %w", err)
  70. }
  71. if codeResp.Code == errorcode.OK {
  72. return &codeResp.Data, nil
  73. }
  74. return nil, codeResp.ToError()
  75. }
  76. return nil, fmt.Errorf("unknow response content type: %s", contType)
  77. }
  78. const StorageGetPath = "/storage/get"
  79. type StorageGet struct {
  80. UserID UserID `form:"userID" json:"userID" binding:"required"`
  81. StorageID StorageID `form:"storageID" json:"storageID" binding:"required"`
  82. }
  83. type StorageGetResp struct {
  84. Storage
  85. }
  86. func (c *Client) StorageGet(req StorageGet) (*StorageGetResp, error) {
  87. url, err := url.JoinPath(c.baseURL, StorageGetPath)
  88. if err != nil {
  89. return nil, err
  90. }
  91. resp, err := http2.GetForm(url, http2.RequestParam{
  92. Query: req,
  93. })
  94. if err != nil {
  95. return nil, err
  96. }
  97. codeResp, err := ParseJSONResponse[response[StorageGetResp]](resp)
  98. if err != nil {
  99. return nil, err
  100. }
  101. if codeResp.Code == errorcode.OK {
  102. return &codeResp.Data, nil
  103. }
  104. return nil, codeResp.ToError()
  105. }