新增接口: - GET /instances/accessible — 查询页实例列表(按access_type筛选) - GET /instances/:id/databases — 数据库列表(placeholder) - GET /instances/:id/databases/:db/tables — 表列表(placeholder) - POST /instances/test-connection — 新实例连接测试 - CRUD /instance-groups — 完整实例组管理(创建/更新/删除/查询单个) - /instance-groups/:id/instances — 实例分配/移除 - /instance-groups/:id/users — 用户分配 - PUT /instance-groups/users/:userId/groups — 用户组更新 - GET/PUT /ldap-config — LDAP配置读写 - POST /ldap-config/test — LDAP连接测试(placeholder) - POST /ldap-config/ou-list — OU列表(placeholder) - POST /ldap-config/user-list — 用户列表(placeholder) - PUT /settings — 批量更新设置 - GET /settings/cleanup/preview — 清理预览 - POST /settings/cleanup/run — 执行清理 修复: - ListSettings 返回按group分组的dict(前端期望格式) - ListInstanceGroups 返回enriched数据(含实例/用户计数) - 前端所有页面0个404错误,查询页实例下拉框正常显示
122 lines
4.4 KiB
Go
122 lines
4.4 KiB
Go
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/accessible", handler.AccessibleInstances)
|
|
auth.GET("/instances/stats", handler.InstanceStats)
|
|
auth.GET("/instances/:id", handler.GetInstance)
|
|
auth.GET("/instances/:id/databases", handler.ListDatabases)
|
|
auth.GET("/instances/:id/databases/:db/tables", handler.ListTables)
|
|
auth.POST("/instances/:id/test-connection", handler.TestConnection)
|
|
auth.POST("/instances/test-connection", handler.TestNewConnection)
|
|
|
|
// 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)
|
|
}
|
|
|
|
// Instance Groups
|
|
auth.GET("/instance-groups", handler.ListInstanceGroups)
|
|
auth.GET("/instance-groups/:id", handler.GetInstanceGroup)
|
|
auth.GET("/instance-groups/:id/users", handler.ListGroupUsers)
|
|
auth.POST("/instance-groups/:id/instances", handler.AssignGroupInstances)
|
|
auth.DELETE("/instance-groups/:id/instances/:instanceId", handler.RemoveGroupInstance)
|
|
auth.POST("/instance-groups/:id/users", handler.AssignGroupUsers)
|
|
auth.PUT("/instance-groups/users/:userId/groups", handler.UpdateUserGroups)
|
|
|
|
// Instance Group management (admin/dba only)
|
|
igAdmin := auth.Group("")
|
|
igAdmin.Use(middleware.RequireRole("admin", "dba"))
|
|
{
|
|
igAdmin.POST("/instance-groups", handler.CreateInstanceGroup)
|
|
igAdmin.PUT("/instance-groups/:id", handler.UpdateInstanceGroup)
|
|
igAdmin.DELETE("/instance-groups/:id", handler.DeleteInstanceGroup)
|
|
}
|
|
|
|
// 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)
|
|
}
|
|
|
|
// LDAP config (admin only)
|
|
ldapAdmin := auth.Group("")
|
|
ldapAdmin.Use(middleware.RequireRole("admin"))
|
|
{
|
|
ldapAdmin.GET("/ldap-config", handler.GetLDAPConfig)
|
|
ldapAdmin.PUT("/ldap-config", handler.UpdateLDAPConfig)
|
|
ldapAdmin.POST("/ldap-config/test", handler.TestLDAPConnection)
|
|
ldapAdmin.POST("/ldap-config/ou-list", handler.ListLDAPOUs)
|
|
ldapAdmin.POST("/ldap-config/user-list", handler.ListLDAPUsers)
|
|
ldapAdmin.POST("/ldap-config/create-ou", handler.CreateLDAPOU)
|
|
ldapAdmin.POST("/ldap-config/create-user", handler.CreateLDAPUser)
|
|
ldapAdmin.POST("/ldap-config/batch-import-ldap", handler.BatchImportLDAP)
|
|
}
|
|
|
|
// Settings
|
|
auth.GET("/settings", handler.ListSettings)
|
|
auth.PUT("/settings", handler.UpdateSettings)
|
|
auth.GET("/settings/cleanup/preview", handler.SettingsCleanupPreview)
|
|
auth.POST("/settings/cleanup/run", handler.SettingsCleanupRun)
|
|
|
|
// 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("/notifications/channels", handler.ListNotificationChannels)
|
|
auth.GET("/notifications/templates", handler.ListNotificationTemplates)
|
|
auth.GET("/workflows", handler.ListWorkflows)
|
|
auth.POST("/notifications/test", handler.TestNotification)
|
|
}
|
|
}
|