api.go 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // Package routes Path: routes 注册路由
  2. package routes
  3. import (
  4. "github.com/gin-gonic/gin"
  5. "github.com/runningwater/gohub/app/http/controllers/api/v1/auth"
  6. "github.com/runningwater/gohub/app/http/middlewares"
  7. "github.com/runningwater/gohub/pkg/config"
  8. controllers "github.com/runningwater/gohub/app/http/controllers/api/v1"
  9. )
  10. // RegisterAPIRoutes 注册路由
  11. func RegisterAPIRoutes(r *gin.Engine) {
  12. // v1 路由组,所有 v1 版本的路由都放在这里
  13. var v1 *gin.RouterGroup
  14. if len(config.Get("app.api_domain")) == 0 {
  15. v1 = r.Group("/api/v1")
  16. } else {
  17. v1 = r.Group("/v1")
  18. }
  19. // 全局限流中间件:每小时限流。这里是所有 API (根据 IP)请求加起来。
  20. // 作为参考 Github API 每小时最多 60 个请求(根据 IP)。
  21. // 测试时,可以调高一点。
  22. v1.Use(middlewares.LimitIP("200-H"))
  23. {
  24. uc := new(controllers.UsersController)
  25. authGroup := v1.Group("/auth")
  26. {
  27. suc := new(auth.SignupController)
  28. vcc := new(auth.VerifyCodeController)
  29. // 注册手机号是否已存在
  30. authGroup.POST("/signup/phone/exist", middlewares.GuestJWT(), middlewares.LimitIP("60-H"), suc.IsPhoneExist)
  31. // 注册邮箱是否已存在
  32. authGroup.POST("/signup/email/exist", middlewares.GuestJWT(), middlewares.LimitIP("60-H"), suc.IsEmailExist)
  33. // 注册用户
  34. authGroup.POST("/signup/using-phone", suc.SignupUsingPhone)
  35. authGroup.POST("/signup/using-email", suc.SignupUsingEmail)
  36. // 显示图片验证码
  37. authGroup.POST("/verify_code/captcha", middlewares.LimitIP("50-H"), vcc.ShowCaptcha)
  38. // 发送手机验证码
  39. authGroup.POST("/verify_code/phone", middlewares.LimitIP("20-H"), vcc.SendUsingPhone)
  40. // 发送邮箱验证码
  41. authGroup.POST("/verify_code/email", middlewares.LimitIP("20-H"), vcc.SendUsingEmail)
  42. logc := new(auth.LoginController)
  43. // 手机号登录
  44. authGroup.POST("/login/using-phone", logc.LoginByPhone)
  45. // 账号登录,支持手机号,email 和用户名登录
  46. authGroup.POST("/login/using-password", logc.LoginByPassword)
  47. // 刷新 Access Token
  48. authGroup.POST("/login/refresh-token", logc.RefreshToken)
  49. // 重置密码
  50. pc := new(auth.PasswordController)
  51. // 使用手机重置密码
  52. authGroup.POST("/password-reset/using-phone", middlewares.LimitPerRoute("20-H"), pc.ResetByPhone)
  53. // 当前登录用户信息
  54. authGroup.GET("/user", middlewares.AuthJWT(), uc.CurrentUser)
  55. }
  56. userGroup := v1.Group("/users")
  57. {
  58. userGroup.GET("", uc.Index)
  59. userGroup.PUT("", middlewares.AuthJWT(), uc.UpdateProfile)
  60. userGroup.POST("/email", middlewares.AuthJWT(), uc.UpdateEmail)
  61. userGroup.POST("/avatar", middlewares.AuthJWT(), uc.UpdateAvatar)
  62. }
  63. cgc := new(controllers.CategoriesController)
  64. categoryGroup := v1.Group("/categories")
  65. {
  66. categoryGroup.GET("", cgc.Index)
  67. categoryGroup.POST("", middlewares.AuthJWT(), cgc.Save)
  68. categoryGroup.PUT("/:id", middlewares.AuthJWT(), cgc.Update)
  69. categoryGroup.DELETE("/:id", middlewares.AuthJWT(), cgc.Delete)
  70. }
  71. tpc := new(controllers.TopicsController)
  72. tpcGroup := v1.Group("/topics")
  73. {
  74. tpcGroup.GET("", tpc.Index)
  75. tpcGroup.POST("", middlewares.AuthJWT(), tpc.Store)
  76. tpcGroup.PUT("/:id", middlewares.AuthJWT(), tpc.Update)
  77. tpcGroup.DELETE("/:id", middlewares.AuthJWT(), tpc.Delete)
  78. tpcGroup.GET("/:id", tpc.Show)
  79. }
  80. lsc := new(controllers.LinksController)
  81. linksGroup := v1.Group("/links")
  82. {
  83. linksGroup.GET("", lsc.Index)
  84. }
  85. }
  86. }