routers.go 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package routers
  2. import (
  3. dataQuery "dbview/service/internal/modules/data_query"
  4. dqSer "dbview/service/internal/modules/data_query/service"
  5. "dbview/service/internal/modules/database_meta"
  6. dbSer "dbview/service/internal/modules/database_meta/service"
  7. storageRouter "dbview/service/internal/modules/db_conn_storage"
  8. storageService "dbview/service/internal/modules/db_conn_storage/service"
  9. aiChat "dbview/service/internal/modules/mcp_ai"
  10. aiSvc "dbview/service/internal/modules/mcp_ai/service"
  11. connpool "dbview/service/internal/modules/connection_pool"
  12. "dbview/service/internal/common/manager/connection"
  13. storagemgr "dbview/service/internal/common/manager/storage"
  14. "dbview/service/internal/common/manager/task"
  15. "dbview/service/internal/config"
  16. "github.com/gin-gonic/gin"
  17. )
  18. // RegisterRoutes 注册所有模块路由(不依赖 bootstrap 包,避免导入环)
  19. func RegisterRoutes(engine *gin.Engine, storageManager interface{}, taskManager *task.Manager, connPool *connection.ConnectionPool, aiCfg config.AIConfig) {
  20. // 1) 存储模块(db_conn_storage)
  21. if storageManager != nil {
  22. if typed, ok := storageManager.(storagemgr.StorageInterface); ok {
  23. storageService.Init(typed)
  24. }
  25. } else {
  26. storageService.Init(nil)
  27. panic("存储管理器未初始化成功")
  28. }
  29. storageRouter.RegisterRoutes(engine)
  30. // 2) 数据库操作模块(database_operations)
  31. // 创建 MetadataService:优先使用连接池(当 connPool 不为 nil 时)
  32. var metaSvc *dbSer.MetadataService
  33. if connPool != nil {
  34. metaSvc = dbSer.NewMetadataServiceWithPool(connPool)
  35. } else {
  36. // 回退到默认注入(此处传入 nils,实际应由具体 driver 注入)
  37. metaSvc = dbSer.NewMetadataService(nil, nil, nil)
  38. }
  39. database_meta.RegisterRoutes(engine, metaSvc)
  40. // 2.5) 连接池管理接口
  41. connpool.RegisterRoutes(engine, connPool)
  42. // 3) 数据查询模块(data_query):优先使用连接池创建 DataService
  43. var dataSvc *dqSer.DataService
  44. if connPool != nil && taskManager != nil {
  45. dataSvc = dqSer.NewDataService(dqSer.WithConnectionPool(connPool), dqSer.WithTaskManager(taskManager), dqSer.WithDataReader(nil))
  46. } else if connPool != nil {
  47. dataSvc = dqSer.NewDataService(dqSer.WithConnectionPool(connPool), dqSer.WithDataReader(nil))
  48. } else {
  49. dataSvc = dqSer.NewDataService(dqSer.WithDataReader(nil))
  50. }
  51. dataQuery.RegisterRoutes(engine, dataSvc)
  52. // 4) AI Chat 模块(开关来自 TOML,配置来自存储)
  53. var aiSvcInst *aiSvc.AIService
  54. if aiCfg.Enable {
  55. if sm, ok := storageManager.(storagemgr.StorageInterface); ok {
  56. aiSvcInst = aiSvc.NewAIService(aiCfg.Enable, sm, taskManager)
  57. }
  58. }
  59. aiChat.RegisterRoutes(engine, aiSvcInst)
  60. // 3) SQL 编辑器模块(sql_editor)
  61. // var sqlSvc *sqlService.SQLEditorService
  62. // if taskManager != nil {
  63. // sqlSvc = sqlService.NewSQLEditorService(nil, taskManager, nil)
  64. // } else {
  65. // sqlSvc = sqlService.NewSQLEditorService(nil, nil, nil)
  66. // }
  67. // sqlH := sqlHandler.NewSQLEditorHandler(sqlSvc, nil)
  68. // apiGroup := engine.Group("/api/v1")
  69. // sqleditor.RegisterSQLRoutes(apiGroup, sqlH)
  70. }