package main import ( "log" "os" "github.com/gin-gonic/gin" "go-dy/internal/config" dbpkg "go-dy/internal/db" "go-dy/internal/handlers" "go-dy/internal/middleware" "go-dy/internal/resp" ) func main() { cfg := config.Load() // No OSS init at startup; it's lazily initialized in the upload handler. if mode := os.Getenv("GIN_MODE"); mode != "" { gin.SetMode(mode) } // Startup DB connectivity check if _, err := dbpkg.Get(cfg); err != nil { log.Printf("[startup] database connection failed: %v", err) } else { log.Printf("[startup] database connection ok") } r := gin.Default() r.GET("/api/health", func(c *gin.Context) { if _, err := dbpkg.Get(cfg); err != nil { resp.OK(c, gin.H{"status": "ok", "db": "error", "error": err.Error()}) return } resp.OK(c, gin.H{"status": "ok", "db": "ok"}) }) // Captcha endpoint for registration r.GET("/api/captcha/new", handlers.CaptchaNewHandler()) r.POST("/api/login", handlers.LoginHandler(cfg)) // Always expose register endpoint; handler enforces AllowRegistration. r.POST("/api/register", handlers.RegisterHandler(cfg)) auth := middleware.Auth(cfg.JWTSecret) r.POST("/api/upload", auth, handlers.UploadHandler(cfg)) addr := ":" + cfg.Port log.Printf("server listening on %s", addr) if err := r.Run(addr); err != nil { log.Fatal(err) } }