router.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package router
  2. import (
  3. "net/http"
  4. "github.com/celestia-trace/backend/config"
  5. "github.com/celestia-trace/backend/handlers"
  6. "github.com/celestia-trace/backend/middleware"
  7. "github.com/gin-gonic/gin"
  8. "gorm.io/gorm"
  9. )
  10. // Setup creates and configures the gin router
  11. func Setup(db *gorm.DB, cfg *config.Config) *gin.Engine {
  12. gin.SetMode(cfg.GinMode)
  13. r := gin.Default()
  14. // CORS middleware for dev
  15. r.Use(func(c *gin.Context) {
  16. c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
  17. c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE")
  18. c.Writer.Header().Set("Access-Control-Allow-Headers", "Origin, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization")
  19. if c.Request.Method == "OPTIONS" {
  20. c.AbortWithStatus(204)
  21. return
  22. }
  23. c.Next()
  24. })
  25. v1 := r.Group("/v1")
  26. {
  27. v1.GET("/health", func(c *gin.Context) {
  28. c.JSON(http.StatusOK, gin.H{"code": 0, "message": "success", "data": "healthy"})
  29. })
  30. authHandler := handlers.AuthHandler{DB: db, Cfg: cfg}
  31. authRoutes := v1.Group("/auth")
  32. {
  33. authRoutes.POST("/register", authHandler.Register)
  34. authRoutes.POST("/login", authHandler.Login)
  35. // Auth required
  36. authRoutes.Use(middleware.Auth(cfg))
  37. authRoutes.POST("/logout", authHandler.Logout)
  38. }
  39. userRoutes := v1.Group("/user")
  40. userRoutes.Use(middleware.Auth(cfg))
  41. {
  42. userRoutes.GET("/profile", authHandler.GetProfile)
  43. userRoutes.PUT("/profile", authHandler.UpdateProfile)
  44. userRoutes.POST("/change-password", authHandler.ChangePassword)
  45. }
  46. }
  47. return r
  48. }