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.

user_space.go 5.7 kB

7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. package http
  2. import (
  3. "fmt"
  4. "net/http"
  5. "github.com/gin-gonic/gin"
  6. "gitlink.org.cn/cloudream/common/pkgs/logger"
  7. "gitlink.org.cn/cloudream/jcs-pub/client/internal/http/types"
  8. cliapi "gitlink.org.cn/cloudream/jcs-pub/client/sdk/api/v1"
  9. "gitlink.org.cn/cloudream/jcs-pub/common/ecode"
  10. )
  11. type UserSpaceService struct {
  12. *Server
  13. }
  14. func (s *Server) UserSpace() *UserSpaceService {
  15. return &UserSpaceService{
  16. Server: s,
  17. }
  18. }
  19. func (s *UserSpaceService) DownloadPackage(ctx *gin.Context) {
  20. log := logger.WithField("HTTP", "UserSpace.DownloadPackage")
  21. var req cliapi.UserSpaceDownloadPackageReq
  22. if err := ctx.ShouldBindJSON(&req); err != nil {
  23. log.Warnf("binding body: %s", err.Error())
  24. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  25. return
  26. }
  27. err := s.svc.UserSpaceSvc().DownloadPackage(req.PackageID, req.UserSpaceID, req.RootPath)
  28. if err != nil {
  29. log.Warnf("downloading package: %s", err.Error())
  30. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, "%v", err))
  31. return
  32. }
  33. ctx.JSON(http.StatusOK, types.OK(cliapi.UserSpaceDownloadPackageResp{}))
  34. }
  35. func (s *UserSpaceService) CreatePackage(ctx *gin.Context) {
  36. log := logger.WithField("HTTP", "UserSpace.CreatePackage")
  37. var req cliapi.UserSpaceCreatePackageReq
  38. if err := ctx.ShouldBindJSON(&req); err != nil {
  39. log.Warnf("binding body: %s", err.Error())
  40. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  41. return
  42. }
  43. pkg, err := s.svc.Uploader.UserSpaceUpload(req.UserSpaceID, req.Path, req.BucketID, req.Name, req.SpaceAffinity)
  44. if err != nil {
  45. log.Warnf("userspace create package: %s", err.Error())
  46. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, fmt.Sprintf("userspace create package: %v", err)))
  47. return
  48. }
  49. ctx.JSON(http.StatusOK, types.OK(cliapi.UserSpaceCreatePackageResp{
  50. Package: *pkg,
  51. }))
  52. }
  53. func (s *UserSpaceService) Get(ctx *gin.Context) {
  54. log := logger.WithField("HTTP", "UserSpace.Get")
  55. var req cliapi.UserSpaceGet
  56. if err := ctx.ShouldBindQuery(&req); err != nil {
  57. log.Warnf("binding query: %s", err.Error())
  58. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  59. return
  60. }
  61. info, err := s.svc.UserSpaceSvc().Get(req.UserSpaceID)
  62. if err != nil {
  63. log.Warnf("getting info: %s", err.Error())
  64. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, "get userspace inf failed"))
  65. return
  66. }
  67. ctx.JSON(http.StatusOK, types.OK(cliapi.UserSpaceGetResp{
  68. UserSpace: info,
  69. }))
  70. }
  71. func (s *UserSpaceService) Create(ctx *gin.Context) {
  72. log := logger.WithField("HTTP", "UserSpace.Create")
  73. req, err := types.ShouldBindJSONEx[cliapi.UserSpaceCreate](ctx)
  74. if err != nil {
  75. log.Warnf("binding body: %s", err.Error())
  76. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  77. return
  78. }
  79. resp, cerr := s.svc.UserSpaceSvc().Create(req)
  80. if cerr != nil {
  81. log.Warnf("creating userspace: %v", cerr)
  82. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  83. return
  84. }
  85. ctx.JSON(http.StatusOK, types.OK(resp))
  86. }
  87. func (s *UserSpaceService) Update(ctx *gin.Context) {
  88. log := logger.WithField("HTTP", "UserSpace.Update")
  89. var req cliapi.UserSpaceUpdate
  90. req, err := types.ShouldBindJSONEx[cliapi.UserSpaceUpdate](ctx)
  91. if err != nil {
  92. log.Warnf("binding body: %s", err.Error())
  93. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  94. return
  95. }
  96. resp, cerr := s.svc.UserSpaceSvc().Update(req)
  97. if cerr != nil {
  98. log.Warnf("updating userspace: %v", cerr)
  99. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  100. return
  101. }
  102. ctx.JSON(http.StatusOK, types.OK(resp))
  103. }
  104. func (s *UserSpaceService) Delete(ctx *gin.Context) {
  105. log := logger.WithField("HTTP", "UserSpace.Delete")
  106. var req cliapi.UserSpaceDelete
  107. if err := ctx.ShouldBindJSON(&req); err != nil {
  108. log.Warnf("binding body: %s", err.Error())
  109. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  110. return
  111. }
  112. resp, cerr := s.svc.UserSpaceSvc().Delete(req)
  113. if cerr != nil {
  114. log.Warnf("deleting userspace: %v", cerr)
  115. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  116. return
  117. }
  118. ctx.JSON(http.StatusOK, types.OK(resp))
  119. }
  120. func (s *UserSpaceService) Test(ctx *gin.Context) {
  121. log := logger.WithField("HTTP", "UserSpace.Test")
  122. var req cliapi.UserSpaceTest
  123. req, err := types.ShouldBindJSONEx[cliapi.UserSpaceTest](ctx)
  124. if err != nil {
  125. log.Warnf("binding body: %s", err.Error())
  126. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  127. return
  128. }
  129. resp, cerr := s.svc.UserSpaceSvc().Test(req)
  130. if cerr != nil {
  131. log.Warnf("testing userspace: %v", cerr)
  132. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  133. return
  134. }
  135. ctx.JSON(http.StatusOK, types.OK(resp))
  136. }
  137. func (s *UserSpaceService) SpaceToSpace(ctx *gin.Context) {
  138. log := logger.WithField("HTTP", "UserSpace.SpaceToSpace")
  139. var req cliapi.UserSpaceSpaceToSpace
  140. if err := ctx.ShouldBindJSON(&req); err != nil {
  141. log.Warnf("binding body: %s", err.Error())
  142. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  143. return
  144. }
  145. ret, err := s.svc.UserSpaceSvc().SpaceToSpace(req.SrcUserSpaceID, req.SrcPath, req.DstUserSpaceID, req.DstPath)
  146. if err != nil {
  147. log.Warnf("space2space: %s", err.Error())
  148. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, "space2space failed"))
  149. return
  150. }
  151. ctx.JSON(http.StatusOK, types.OK(cliapi.UserSpaceSpaceToSpaceResp{
  152. SpaceToSpaceResult: ret,
  153. }))
  154. }

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