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 4.8 kB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package storage
  2. import (
  3. "fmt"
  4. "io"
  5. "net/url"
  6. "strings"
  7. "gitlink.org.cn/cloudream/common/consts/errorcode"
  8. "gitlink.org.cn/cloudream/common/models"
  9. "gitlink.org.cn/cloudream/common/pkgs/iterator"
  10. myhttp "gitlink.org.cn/cloudream/common/utils/http"
  11. "gitlink.org.cn/cloudream/common/utils/serder"
  12. )
  13. type PackageUploadReq struct {
  14. UserID int64 `json:"userID"`
  15. BucketID int64 `json:"bucketID"`
  16. Name string `json:"name"`
  17. Redundancy models.TypedRedundancyInfo `json:"redundancy"`
  18. NodeAffinity *int64 `json:"nodeAffinity"`
  19. Files PackageUploadFileIterator `json:"-"`
  20. }
  21. type IterPackageUploadFile struct {
  22. Path string
  23. File io.ReadCloser
  24. }
  25. type PackageUploadFileIterator = iterator.Iterator[*IterPackageUploadFile]
  26. type PackageUploadResp struct {
  27. PackageID int64 `json:"packageID,string"`
  28. }
  29. func (c *Client) PackageUpload(req PackageUploadReq) (*PackageUploadResp, error) {
  30. url, err := url.JoinPath(c.baseURL, "/package/upload")
  31. if err != nil {
  32. return nil, err
  33. }
  34. infoJSON, err := serder.ObjectToJSON(req)
  35. if err != nil {
  36. return nil, fmt.Errorf("package info to json: %w", err)
  37. }
  38. resp, err := myhttp.PostMultiPart(url, myhttp.MultiPartRequestParam{
  39. Form: map[string]string{"info": string(infoJSON)},
  40. Files: iterator.Map(req.Files, func(src *IterPackageUploadFile) (*myhttp.IterMultiPartFile, error) {
  41. return &myhttp.IterMultiPartFile{
  42. FieldName: "files",
  43. FileName: src.Path,
  44. File: src.File,
  45. }, nil
  46. }),
  47. })
  48. if err != nil {
  49. return nil, err
  50. }
  51. contType := resp.Header.Get("Content-Type")
  52. if strings.Contains(contType, myhttp.ContentTypeJSON) {
  53. var codeResp response[PackageUploadResp]
  54. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  55. return nil, fmt.Errorf("parsing response: %w", err)
  56. }
  57. if codeResp.Code == errorcode.OK {
  58. return &codeResp.Data, nil
  59. }
  60. return nil, codeResp.ToError()
  61. }
  62. return nil, fmt.Errorf("unknow response content type: %s", contType)
  63. }
  64. type PackageDeleteReq struct {
  65. UserID int64 `json:"userID"`
  66. PackageID int64 `json:"packageID"`
  67. }
  68. func (c *Client) PackageDelete(req PackageDeleteReq) error {
  69. url, err := url.JoinPath(c.baseURL, "/package/delete")
  70. if err != nil {
  71. return err
  72. }
  73. resp, err := myhttp.PostJSON(url, myhttp.RequestParam{
  74. Body: req,
  75. })
  76. if err != nil {
  77. return err
  78. }
  79. contType := resp.Header.Get("Content-Type")
  80. if strings.Contains(contType, myhttp.ContentTypeJSON) {
  81. var codeResp response[any]
  82. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  83. return fmt.Errorf("parsing response: %w", err)
  84. }
  85. if codeResp.Code == errorcode.OK {
  86. return nil
  87. }
  88. return codeResp.ToError()
  89. }
  90. return fmt.Errorf("unknow response content type: %s", contType)
  91. }
  92. type PackageGetCachedNodesReq struct {
  93. PackageID int64 `json:"packageID"`
  94. UserID int64 `json:"userID"`
  95. }
  96. type PackageGetCachedNodesResp struct {
  97. models.PackageCachingInfo
  98. }
  99. func (c *Client) PackageGetCachedNodes(req PackageGetCachedNodesReq) (*PackageGetCachedNodesResp, error) {
  100. url, err := url.JoinPath(c.baseURL, "/package/getCachedNodes")
  101. if err != nil {
  102. return nil, err
  103. }
  104. resp, err := myhttp.GetJSON(url, myhttp.RequestParam{
  105. Body: req,
  106. })
  107. if err != nil {
  108. return nil, err
  109. }
  110. contType := resp.Header.Get("Content-Type")
  111. if strings.Contains(contType, myhttp.ContentTypeJSON) {
  112. var codeResp response[PackageGetCachedNodesResp]
  113. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  114. return nil, fmt.Errorf("parsing response: %w", err)
  115. }
  116. if codeResp.Code == errorcode.OK {
  117. return &codeResp.Data, nil
  118. }
  119. return nil, codeResp.ToError()
  120. }
  121. return nil, fmt.Errorf("unknow response content type: %s", contType)
  122. }
  123. type PackageGetLoadedNodesReq struct {
  124. PackageID int64 `json:"packageID"`
  125. UserID int64 `json:"userID"`
  126. }
  127. type PackageGetLoadedNodesResp struct {
  128. NodeIDs []int64 `json:"nodeIDs"`
  129. }
  130. func (c *Client) PackageGetLoadedNodes(req PackageGetLoadedNodesReq) (*PackageGetLoadedNodesResp, error) {
  131. url, err := url.JoinPath(c.baseURL, "/package/getLoadedNodes")
  132. if err != nil {
  133. return nil, err
  134. }
  135. resp, err := myhttp.GetJSON(url, myhttp.RequestParam{
  136. Body: req,
  137. })
  138. if err != nil {
  139. return nil, err
  140. }
  141. contType := resp.Header.Get("Content-Type")
  142. if strings.Contains(contType, myhttp.ContentTypeJSON) {
  143. var codeResp response[PackageGetLoadedNodesResp]
  144. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  145. return nil, fmt.Errorf("parsing response: %w", err)
  146. }
  147. if codeResp.Code == errorcode.OK {
  148. return &codeResp.Data, nil
  149. }
  150. return nil, codeResp.ToError()
  151. }
  152. return nil, fmt.Errorf("unknow response content type: %s", contType)
  153. }