golang-dy-back/main.go
2025-10-28 16:59:41 +08:00

57 lines
1.5 KiB
Go

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)
}
}