package main import ( "embed" "io/fs" "log" "net/http" "pc-monitor-server/api" "pc-monitor-server/config" "pc-monitor-server/repository" "pc-monitor-server/service" "github.com/gin-gonic/gin" ) //go:embed web/dist var webFS embed.FS func main() { cfg := config.Load() db, err := repository.NewDB(cfg.Database.Path) if err != nil { log.Fatalf("Failed to initialize database: %v", err) } defer db.Close() deviceRepo := repository.NewDeviceRepository(db) metricsRepo := repository.NewMetricsRepository(db) alertRepo := repository.NewAlertRepository(db) deviceService := service.NewDeviceService(deviceRepo) metricsService := service.NewMetricsService(metricsRepo) alertService := service.NewAlertService(alertRepo, metricsRepo) router := api.SetupRouter(deviceService, metricsService, alertService) // Serve embedded frontend distFS, err := fs.Sub(webFS, "web/dist") if err != nil { log.Fatalf("Failed to load embedded frontend: %v", err) } router.StaticFS("/assets", http.FS(distFS)) router.NoRoute(func(c *gin.Context) { c.FileFromFS("/", http.FS(distFS)) }) log.Printf("Server starting on %s", cfg.Server.Addr) if err := router.Run(cfg.Server.Addr); err != nil { log.Fatalf("Failed to start server: %v", err) } }