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

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

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