feat: Go后端补全所有缺失API接口,消除前端404报错

新增接口:
- 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错误,查询页实例下拉框正常显示
This commit is contained in:
logan committed 2026-05-25 22:14:01 +08:00
1 parent 26148d0ca7
commit 622923821b
5 files changed
+526 -4

No files matched your search

+42 -2
View File
@@ -34,9 +34,13 @@ func Setup(r *gin.Engine) {
// 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("")
@@ -47,6 +51,24 @@ func Setup(r *gin.Engine) {
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"))
@@ -57,6 +79,26 @@ func Setup(r *gin.Engine) {
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"))
@@ -71,11 +113,9 @@ func Setup(r *gin.Engine) {
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)
}
}