package api import ( "pc-monitor-server/api/handler" "pc-monitor-server/service" "github.com/gin-gonic/gin" ) func SetupRouter(deviceService *service.DeviceService, metricsService *service.MetricsService, alertService *service.AlertService) *gin.Engine { r := gin.Default() r.Use(corsMiddleware()) api := r.Group("/api/v1") { deviceHandler := handler.NewDeviceHandler(deviceService) metricsHandler := handler.NewMetricsHandler(metricsService) alertHandler := handler.NewAlertHandler(alertService) // Device endpoints api.POST("/register", deviceHandler.Register) api.GET("/devices", deviceHandler.GetAll) api.GET("/devices/:id", deviceHandler.GetByID) api.DELETE("/devices/:id", deviceHandler.Delete) api.POST("/devices/:id/heartbeat", deviceHandler.Heartbeat) // Metrics endpoints api.POST("/report", metricsHandler.Report) api.GET("/devices/:id/metrics/latest", metricsHandler.GetLatest) api.GET("/devices/:id/metrics/history", metricsHandler.GetHistory) // Alert endpoints api.GET("/alerts", alertHandler.GetActiveAlerts) api.POST("/alerts/rules", alertHandler.CreateRule) api.GET("/devices/:id/alerts/rules", alertHandler.GetRulesByDevice) api.DELETE("/alerts/rules/:id", alertHandler.DeleteRule) api.POST("/alerts/:id/resolve", alertHandler.ResolveAlert) } return r } func corsMiddleware() gin.HandlerFunc { return func(c *gin.Context) { c.Writer.Header().Set("Access-Control-Allow-Origin", "*") c.Writer.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") if c.Request.Method == "OPTIONS" { c.AbortWithStatus(204) return } c.Next() } }