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

7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
7 months ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  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. jcstypes "gitlink.org.cn/cloudream/jcs-pub/common/types"
  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, jcstypes.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) GetByName(ctx *gin.Context) {
  73. log := logger.WithField("HTTP", "UserSpace.GetByName")
  74. var req cliapi.UserSpaceGetByName
  75. if err := ctx.ShouldBindQuery(&req); err != nil {
  76. log.Warnf("binding query: %s", err.Error())
  77. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  78. return
  79. }
  80. info, err := s.svc.UserSpaceSvc().GetByName(req.Name)
  81. if err != nil {
  82. log.Warnf("getting info: %s", err.Error())
  83. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, "get userspace info failed"))
  84. return
  85. }
  86. ctx.JSON(http.StatusOK, types.OK(cliapi.UserSpaceGetByNameResp{
  87. UserSpace: info,
  88. }))
  89. }
  90. func (s *UserSpaceService) GetAll(ctx *gin.Context) {
  91. log := logger.WithField("HTTP", "UserSpace.GetAll")
  92. allInfos, err := s.svc.UserSpaceSvc().GetAll()
  93. if err != nil {
  94. log.Warnf("getting info: %s", err.Error())
  95. ctx.JSON(http.StatusOK, types.Failed(ecode.OperationFailed, "get userspaces info failed"))
  96. return
  97. }
  98. ctx.JSON(http.StatusOK, types.OK(cliapi.UserSpaceGetAllResp{
  99. UserSpaces: allInfos,
  100. }))
  101. }
  102. func (s *UserSpaceService) Create(ctx *gin.Context) {
  103. log := logger.WithField("HTTP", "UserSpace.Create")
  104. req, err := types.ShouldBindJSONEx[cliapi.UserSpaceCreate](ctx)
  105. if err != nil {
  106. log.Warnf("binding body: %s", err.Error())
  107. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  108. return
  109. }
  110. resp, cerr := s.svc.UserSpaceSvc().Create(req)
  111. if cerr != nil {
  112. log.Warnf("creating userspace: %v", cerr)
  113. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  114. return
  115. }
  116. ctx.JSON(http.StatusOK, types.OK(resp))
  117. }
  118. func (s *UserSpaceService) Update(ctx *gin.Context) {
  119. log := logger.WithField("HTTP", "UserSpace.Update")
  120. var req cliapi.UserSpaceUpdate
  121. req, err := types.ShouldBindJSONEx[cliapi.UserSpaceUpdate](ctx)
  122. if err != nil {
  123. log.Warnf("binding body: %s", err.Error())
  124. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  125. return
  126. }
  127. resp, cerr := s.svc.UserSpaceSvc().Update(req)
  128. if cerr != nil {
  129. log.Warnf("updating userspace: %v", cerr)
  130. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  131. return
  132. }
  133. ctx.JSON(http.StatusOK, types.OK(resp))
  134. }
  135. func (s *UserSpaceService) Delete(ctx *gin.Context) {
  136. log := logger.WithField("HTTP", "UserSpace.Delete")
  137. var req cliapi.UserSpaceDelete
  138. if err := ctx.ShouldBindJSON(&req); err != nil {
  139. log.Warnf("binding body: %s", err.Error())
  140. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  141. return
  142. }
  143. resp, cerr := s.svc.UserSpaceSvc().Delete(req)
  144. if cerr != nil {
  145. log.Warnf("deleting userspace: %v", cerr)
  146. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  147. return
  148. }
  149. ctx.JSON(http.StatusOK, types.OK(resp))
  150. }
  151. func (s *UserSpaceService) Test(ctx *gin.Context) {
  152. log := logger.WithField("HTTP", "UserSpace.Test")
  153. var req cliapi.UserSpaceTest
  154. req, err := types.ShouldBindJSONEx[cliapi.UserSpaceTest](ctx)
  155. if err != nil {
  156. log.Warnf("binding body: %s", err.Error())
  157. ctx.JSON(http.StatusBadRequest, types.Failed(ecode.BadArgument, "missing argument or invalid argument"))
  158. return
  159. }
  160. resp, cerr := s.svc.UserSpaceSvc().Test(req)
  161. if cerr != nil {
  162. log.Warnf("testing userspace: %v", cerr)
  163. ctx.JSON(http.StatusOK, types.Failed(cerr.Code, cerr.Message))
  164. return
  165. }
  166. ctx.JSON(http.StatusOK, types.OK(resp))
  167. }

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