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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  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. type PackageService struct {
  11. *Client
  12. }
  13. func (c *Client) Package() *PackageService {
  14. return &PackageService{c}
  15. }
  16. const PackageGetPath = "/package/get"
  17. type PackageGetReq struct {
  18. UserID UserID `form:"userID" json:"userID" binding:"required"`
  19. PackageID PackageID `form:"packageID" json:"packageID" binding:"required"`
  20. }
  21. type PackageGetResp struct {
  22. Package
  23. }
  24. func (c *PackageService) Get(req PackageGetReq) (*PackageGetResp, error) {
  25. url, err := url.JoinPath(c.baseURL, PackageGetPath)
  26. if err != nil {
  27. return nil, err
  28. }
  29. resp, err := http2.GetForm(url, http2.RequestParam{
  30. Query: req,
  31. })
  32. if err != nil {
  33. return nil, err
  34. }
  35. codeResp, err := ParseJSONResponse[response[PackageGetResp]](resp)
  36. if err != nil {
  37. return nil, err
  38. }
  39. if codeResp.Code == errorcode.OK {
  40. return &codeResp.Data, nil
  41. }
  42. return nil, codeResp.ToError()
  43. }
  44. const PackageGetByNamePath = "/package/getByName"
  45. type PackageGetByName struct {
  46. UserID UserID `form:"userID" json:"userID" binding:"required"`
  47. BucketName string `form:"bucketName" json:"bucketName" binding:"required"`
  48. PackageName string `form:"packageName" json:"packageName" binding:"required"`
  49. }
  50. type PackageGetByNameResp struct {
  51. Package Package `json:"package"`
  52. }
  53. func (c *PackageService) GetByName(req PackageGetByName) (*PackageGetByNameResp, error) {
  54. url, err := url.JoinPath(c.baseURL, PackageGetByNamePath)
  55. if err != nil {
  56. return nil, err
  57. }
  58. resp, err := http2.GetForm(url, http2.RequestParam{
  59. Query: req,
  60. })
  61. if err != nil {
  62. return nil, err
  63. }
  64. codeResp, err := ParseJSONResponse[response[PackageGetByNameResp]](resp)
  65. if err != nil {
  66. return nil, err
  67. }
  68. if codeResp.Code == errorcode.OK {
  69. return &codeResp.Data, nil
  70. }
  71. return nil, codeResp.ToError()
  72. }
  73. const PackageCreatePath = "/package/create"
  74. type PackageCreate struct {
  75. UserID UserID `json:"userID"`
  76. BucketID BucketID `json:"bucketID"`
  77. Name string `json:"name"`
  78. }
  79. type PackageCreateResp struct {
  80. Package Package `json:"package"`
  81. }
  82. func (s *PackageService) Create(req PackageCreate) (*PackageCreateResp, error) {
  83. url, err := url.JoinPath(s.baseURL, PackageCreatePath)
  84. if err != nil {
  85. return nil, err
  86. }
  87. resp, err := http2.PostJSON(url, http2.RequestParam{
  88. Body: req,
  89. })
  90. if err != nil {
  91. return nil, err
  92. }
  93. codeResp, err := ParseJSONResponse[response[PackageCreateResp]](resp)
  94. if err != nil {
  95. return nil, err
  96. }
  97. if codeResp.Code == errorcode.OK {
  98. return &codeResp.Data, nil
  99. }
  100. return nil, codeResp.ToError()
  101. }
  102. const PackageDeletePath = "/package/delete"
  103. type PackageDelete struct {
  104. UserID UserID `json:"userID" binding:"required"`
  105. PackageID PackageID `json:"packageID" binding:"required"`
  106. }
  107. func (c *PackageService) Delete(req PackageDelete) error {
  108. url, err := url.JoinPath(c.baseURL, PackageDeletePath)
  109. if err != nil {
  110. return err
  111. }
  112. resp, err := http2.PostJSON(url, http2.RequestParam{
  113. Body: req,
  114. })
  115. if err != nil {
  116. return err
  117. }
  118. contType := resp.Header.Get("Content-Type")
  119. if strings.Contains(contType, http2.ContentTypeJSON) {
  120. var codeResp response[any]
  121. if err := serder.JSONToObjectStream(resp.Body, &codeResp); err != nil {
  122. return fmt.Errorf("parsing response: %w", err)
  123. }
  124. if codeResp.Code == errorcode.OK {
  125. return nil
  126. }
  127. return codeResp.ToError()
  128. }
  129. return fmt.Errorf("unknow response content type: %s", contType)
  130. }
  131. const PackageListBucketPackagesPath = "/package/listBucketPackages"
  132. type PackageListBucketPackages struct {
  133. UserID UserID `form:"userID" json:"userID" binding:"required"`
  134. BucketID BucketID `form:"bucketID" json:"bucketID" binding:"required"`
  135. }
  136. type PackageListBucketPackagesResp struct {
  137. Packages []Package `json:"packages"`
  138. }
  139. func (c *PackageService) ListBucketPackages(req PackageListBucketPackages) (*PackageListBucketPackagesResp, error) {
  140. url, err := url.JoinPath(c.baseURL, PackageListBucketPackagesPath)
  141. if err != nil {
  142. return nil, err
  143. }
  144. resp, err := http2.GetForm(url, http2.RequestParam{
  145. Query: req,
  146. })
  147. if err != nil {
  148. return nil, err
  149. }
  150. codeResp, err := ParseJSONResponse[response[PackageListBucketPackagesResp]](resp)
  151. if err != nil {
  152. return nil, err
  153. }
  154. if codeResp.Code == errorcode.OK {
  155. return &codeResp.Data, nil
  156. }
  157. return nil, codeResp.ToError()
  158. }
  159. const PackageGetCachedNodesPath = "/package/getCachedNodes"
  160. type PackageGetCachedNodesReq struct {
  161. PackageID PackageID `form:"packageID" json:"packageID" binding:"required"`
  162. UserID UserID `form:"userID" json:"userID" binding:"required"`
  163. }
  164. type PackageGetCachedNodesResp struct {
  165. PackageCachingInfo
  166. }
  167. func (c *PackageService) GetCachedNodes(req PackageGetCachedNodesReq) (*PackageGetCachedNodesResp, error) {
  168. url, err := url.JoinPath(c.baseURL, PackageGetCachedNodesPath)
  169. if err != nil {
  170. return nil, err
  171. }
  172. resp, err := http2.GetJSON(url, http2.RequestParam{
  173. Query: req,
  174. })
  175. if err != nil {
  176. return nil, err
  177. }
  178. codeResp, err := ParseJSONResponse[response[PackageGetCachedNodesResp]](resp)
  179. if err != nil {
  180. return nil, err
  181. }
  182. if codeResp.Code == errorcode.OK {
  183. return &codeResp.Data, nil
  184. }
  185. return nil, codeResp.ToError()
  186. }
  187. const PackageGetLoadedNodesPath = "/package/getLoadedNodes"
  188. type PackageGetLoadedNodesReq struct {
  189. PackageID PackageID `form:"packageID" json:"packageID" binding:"required"`
  190. UserID UserID `form:"userID" json:"userID" binding:"required"`
  191. }
  192. type PackageGetLoadedNodesResp struct {
  193. NodeIDs []NodeID `json:"nodeIDs"`
  194. }
  195. func (c *PackageService) GetLoadedNodes(req PackageGetLoadedNodesReq) (*PackageGetLoadedNodesResp, error) {
  196. url, err := url.JoinPath(c.baseURL, PackageGetLoadedNodesPath)
  197. if err != nil {
  198. return nil, err
  199. }
  200. resp, err := http2.GetJSON(url, http2.RequestParam{
  201. Query: req,
  202. })
  203. if err != nil {
  204. return nil, err
  205. }
  206. codeResp, err := ParseJSONResponse[response[PackageGetLoadedNodesResp]](resp)
  207. if err != nil {
  208. return nil, err
  209. }
  210. if codeResp.Code == errorcode.OK {
  211. return &codeResp.Data, nil
  212. }
  213. return nil, codeResp.ToError()
  214. }