init code

This commit is contained in:
Dmitry Chumak
2025-05-27 19:22:55 +05:00
parent 2b39909fd1
commit b47e0d3445
11 changed files with 529 additions and 0 deletions

72
main.go Normal file
View File

@@ -0,0 +1,72 @@
package main
import (
"database/sql"
"log"
"os"
"time"
"github.com/gin-gonic/gin"
_ "github.com/lib/pq"
"github.com/yourusername/go-sqlc-jwt/db"
"github.com/yourusername/go-sqlc-jwt/internal/handlers"
"github.com/yourusername/go-sqlc-jwt/internal/middleware"
"net/http"
)
type Config struct {
DB struct {
DSN string
}
JWT struct {
Secret string
}
}
func main() {
cfg := Config{
DB: struct{ DSN string }{
DSN: os.Getenv("DB_DSN"),
},
JWT: struct{ Secret string }{
Secret: os.Getenv("JWT_SECRET"),
},
}
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 := handlers.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,
})
})
}
log.Fatal(r.Run(":8080"))
}