Files
go-sqlc-htmx/routes/routes.go
2025-05-28 20:43:37 +05:00

59 lines
1.2 KiB
Go

package routes
import (
"database/sql"
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/yourusername/go-sqlc-jwt/config"
"github.com/yourusername/go-sqlc-jwt/controllers/user"
"github.com/yourusername/go-sqlc-jwt/db"
"github.com/yourusername/go-sqlc-jwt/internal/middleware"
)
func MainRouter() *gin.Engine {
cfg := config.GetCfg()
dbConn, err := sql.Open("postgres", cfg.DB.DSN)
if err != nil {
log.Fatal("failed to connect to db:", err)
}
defer dbConn.Close()
// Configure database connection pool
dbConn.SetMaxOpenConns(25)
dbConn.SetMaxIdleConns(25)
dbConn.SetConnMaxLifetime(5 * time.Minute)
queries := db.New(dbConn)
r := gin.Default()
authHandler := user.NewAuthHandler(queries, cfg.JWT.Secret)
authGroup := r.Group("/auth")
{
authGroup.POST("/register", authHandler.Register)
authGroup.POST("/login", authHandler.Login)
}
// Protected routes
protected := r.Group("/api")
protected.Use(middleware.AuthMiddleware(cfg.JWT.Secret))
{
protected.GET("/profile", func(c *gin.Context) {
userID := c.MustGet("userID").(float64)
username := c.MustGet("username").(string)
c.JSON(http.StatusOK, gin.H{
"id": userID,
"username": username,
})
})
}
user.UserRouter(r)
return r
}