package router import ( "sql-platform/internal/handler" "sql-platform/internal/middleware" "github.com/gin-gonic/gin" ) func Setup(r *gin.Engine) { api := r.Group("/api/v1") // Public routes api.POST("/auth/login", handler.Login) // Authenticated routes auth := api.Group("") auth.Use(middleware.AuthMiddleware()) { // Auth auth.GET("/auth/me", handler.GetMe) // Dashboard auth.GET("/dashboard/stats", handler.DashboardStats) auth.GET("/dashboard/my-tickets", handler.MyTickets) // Tickets auth.GET("/tickets/statistics", handler.TicketStatistics) auth.GET("/tickets", handler.ListTickets) auth.GET("/tickets/:id", handler.GetTicket) auth.POST("/tickets", handler.CreateTicket) auth.POST("/tickets/:id/approve", handler.ApproveTicket) auth.POST("/tickets/:id/execute", handler.ExecuteTicket) // Instances auth.GET("/instances", handler.ListInstances) auth.GET("/instances/stats", handler.InstanceStats) auth.GET("/instances/:id", handler.GetInstance) auth.POST("/instances/:id/test-connection", handler.TestConnection) // Instance management (admin/dba only) admin := auth.Group("") admin.Use(middleware.RequireRole("admin", "dba")) { admin.POST("/instances", handler.CreateInstance) admin.PUT("/instances/:id", handler.UpdateInstance) admin.DELETE("/instances/:id", handler.DeleteInstance) } // Users (admin only) userAdmin := auth.Group("") userAdmin.Use(middleware.RequireRole("admin")) { userAdmin.GET("/users", handler.ListUsers) userAdmin.POST("/users", handler.CreateUser) userAdmin.PUT("/users/:id", handler.UpdateUser) userAdmin.DELETE("/users/:id", handler.DeleteUser) } // gh-ost (admin/dba only) ghostGroup := auth.Group("") ghostGroup.Use(middleware.RequireRole("admin", "dba")) { ghostGroup.POST("/ghost/dry-run", handler.GhOstDryRun) ghostGroup.POST("/ghost/execute", handler.GhOstExecute) ghostGroup.GET("/ghost/status/:taskId", handler.GhOstStatus) ghostGroup.GET("/ghost/tasks", handler.GhOstListTasks) } // Read-only resources auth.GET("/audit-rules", handler.ListAuditRules) auth.GET("/announcements", handler.ListAnnouncements) auth.GET("/query-histories", handler.ListQueryHistories) auth.GET("/settings", handler.ListSettings) auth.GET("/notifications/channels", handler.ListNotificationChannels) auth.GET("/notifications/templates", handler.ListNotificationTemplates) auth.GET("/workflows", handler.ListWorkflows) auth.GET("/instance-groups", handler.ListInstanceGroups) auth.POST("/notifications/test", handler.TestNotification) } }