package main import ( "log" "os" "path/filepath" "github.com/gin-gonic/gin" "github.com/wmms/wmms/internal/handler" "github.com/wmms/wmms/internal/repository" "github.com/wmms/wmms/pkg/database" ) func main() { dsn := os.Getenv("DB_DSN") if dsn == "" { dsn = "root:1234@tcp(localhost:3306)/wmms?charset=utf8mb4&parseTime=true" } err := database.Init(dsn) if err != nil { log.Fatalf("Failed to initialize database: %v", err) } defer database.Close() // Initialize users table and create default users if err := repository.InitUserTable(); err != nil { log.Fatalf("Failed to initialize users table: %v", err) } if err := repository.CreateDefaultUsers(); err != nil { log.Fatalf("Failed to create default users: %v", err) } // Initialize applications table appRepo := repository.NewApplicationRepository() if err := appRepo.InitApplicationTable(); err != nil { log.Fatalf("Failed to initialize applications table: %v", err) } r := gin.Default() registerFrontendRoutes(r, "./frontend/dist") // Serve uploaded files r.Static("/uploads", "./uploads") h := handler.NewHandler() h.RegisterRoutes(r) // WebSocket route r.GET("/ws", handler.HandleWebSocket) // 端口可通过 APP_PORT 覆盖,默认 8082,便于试用脚本探测空闲端口。 port := os.Getenv("APP_PORT") if port == "" { port = "8082" } addr := ":" + port log.Printf("Server starting on %s", addr) log.Println("Default users: admin/admin123, user/user123") if err := r.Run(addr); err != nil { log.Fatalf("Failed to start server: %v", err) } } func registerFrontendRoutes(r *gin.Engine, distDir string) { r.Static("/web", distDir) r.Static("/assets", filepath.Join(distDir, "assets")) r.GET("/", func(c *gin.Context) { c.File(filepath.Join(distDir, "index.html")) }) }