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

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

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