api.go 3.3 KB

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