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