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

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package http
  2. import (
  3. "mime/multipart"
  4. "net/http"
  5. "github.com/gin-gonic/gin"
  6. "gitlink.org.cn/cloudream/common/consts/errorcode"
  7. "gitlink.org.cn/cloudream/common/pkgs/iterator"
  8. "gitlink.org.cn/cloudream/common/pkgs/logger"
  9. cdssdk "gitlink.org.cn/cloudream/common/sdks/storage"
  10. stgiter "gitlink.org.cn/cloudream/storage/common/pkgs/iterator"
  11. )
  12. type PackageService struct {
  13. *Server
  14. }
  15. func (s *Server) Package() *PackageService {
  16. return &PackageService{
  17. Server: s,
  18. }
  19. }
  20. func (s *PackageService) Get(ctx *gin.Context) {
  21. log := logger.WithField("HTTP", "Package.Get")
  22. var req cdssdk.PackageGetReq
  23. if err := ctx.ShouldBindQuery(&req); err != nil {
  24. log.Warnf("binding body: %s", err.Error())
  25. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  26. return
  27. }
  28. pkg, err := s.svc.PackageSvc().Get(req.UserID, req.PackageID)
  29. if err != nil {
  30. log.Warnf("getting package: %s", err.Error())
  31. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get package failed"))
  32. return
  33. }
  34. ctx.JSON(http.StatusOK, OK(cdssdk.PackageGetResp{Package: *pkg}))
  35. }
  36. func (s *PackageService) Create(ctx *gin.Context) {
  37. log := logger.WithField("HTTP", "Package.Create")
  38. var req cdssdk.PackageCreateReq
  39. if err := ctx.ShouldBindJSON(&req); err != nil {
  40. log.Warnf("binding body: %s", err.Error())
  41. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  42. return
  43. }
  44. pkgID, err := s.svc.PackageSvc().Create(req.UserID, req.BucketID, req.Name)
  45. if err != nil {
  46. log.Warnf("creating package: %s", err.Error())
  47. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "create package failed"))
  48. return
  49. }
  50. ctx.JSON(http.StatusOK, OK(cdssdk.PackageCreateResp{
  51. PackageID: pkgID,
  52. }))
  53. }
  54. func (s *PackageService) Delete(ctx *gin.Context) {
  55. log := logger.WithField("HTTP", "Package.Delete")
  56. var req cdssdk.PackageDeleteReq
  57. if err := ctx.ShouldBindJSON(&req); err != nil {
  58. log.Warnf("binding body: %s", err.Error())
  59. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  60. return
  61. }
  62. err := s.svc.PackageSvc().DeletePackage(req.UserID, req.PackageID)
  63. if err != nil {
  64. log.Warnf("deleting package: %s", err.Error())
  65. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "delete package failed"))
  66. return
  67. }
  68. ctx.JSON(http.StatusOK, OK(nil))
  69. }
  70. func (s *PackageService) ListBucketPackages(ctx *gin.Context) {
  71. log := logger.WithField("HTTP", "Package.ListBucketPackages")
  72. var req cdssdk.PackageListBucketPackagesReq
  73. if err := ctx.ShouldBindQuery(&req); err != nil {
  74. log.Warnf("binding query: %s", err.Error())
  75. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  76. return
  77. }
  78. pkgs, err := s.svc.PackageSvc().GetBucketPackages(req.UserID, req.BucketID)
  79. if err != nil {
  80. log.Warnf("getting bucket packages: %s", err.Error())
  81. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get bucket packages failed"))
  82. return
  83. }
  84. ctx.JSON(http.StatusOK, OK(cdssdk.PackageListBucketPackagesResp{
  85. Packages: pkgs,
  86. }))
  87. }
  88. func (s *PackageService) GetCachedNodes(ctx *gin.Context) {
  89. log := logger.WithField("HTTP", "Package.GetCachedNodes")
  90. var req cdssdk.PackageGetCachedNodesReq
  91. if err := ctx.ShouldBindQuery(&req); err != nil {
  92. log.Warnf("binding query: %s", err.Error())
  93. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  94. return
  95. }
  96. resp, err := s.svc.PackageSvc().GetCachedNodes(req.UserID, req.PackageID)
  97. if err != nil {
  98. log.Warnf("get package cached nodes failed: %s", err.Error())
  99. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get package cached nodes failed"))
  100. return
  101. }
  102. ctx.JSON(http.StatusOK, OK(cdssdk.PackageGetCachedNodesResp{PackageCachingInfo: resp}))
  103. }
  104. func (s *PackageService) GetLoadedNodes(ctx *gin.Context) {
  105. log := logger.WithField("HTTP", "Package.GetLoadedNodes")
  106. var req cdssdk.PackageGetLoadedNodesReq
  107. if err := ctx.ShouldBindQuery(&req); err != nil {
  108. log.Warnf("binding query: %s", err.Error())
  109. ctx.JSON(http.StatusBadRequest, Failed(errorcode.BadArgument, "missing argument or invalid argument"))
  110. return
  111. }
  112. nodeIDs, err := s.svc.PackageSvc().GetLoadedNodes(req.UserID, req.PackageID)
  113. if err != nil {
  114. log.Warnf("get package loaded nodes failed: %s", err.Error())
  115. ctx.JSON(http.StatusOK, Failed(errorcode.OperationFailed, "get package loaded nodes failed"))
  116. return
  117. }
  118. ctx.JSON(http.StatusOK, OK(cdssdk.PackageGetLoadedNodesResp{
  119. NodeIDs: nodeIDs,
  120. }))
  121. }
  122. func mapMultiPartFileToUploadingObject(files []*multipart.FileHeader) stgiter.UploadingObjectIterator {
  123. return iterator.Map[*multipart.FileHeader](
  124. iterator.Array(files...),
  125. func(file *multipart.FileHeader) (*stgiter.IterUploadingObject, error) {
  126. stream, err := file.Open()
  127. if err != nil {
  128. return nil, err
  129. }
  130. return &stgiter.IterUploadingObject{
  131. Path: file.Filename,
  132. Size: file.Size,
  133. File: stream,
  134. }, nil
  135. },
  136. )
  137. }

本项目旨在将云际存储公共基础设施化,使个人及企业可低门槛使用高效的云际存储服务(安装开箱即用云际存储客户端即可,无需关注其他组件的部署),同时支持用户灵活便捷定制云际存储的功能细节。