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.5 kB

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