Nenhuma descrição
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

db_factory_helper.go 1.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package dbs
  2. import (
  3. "fmt"
  4. "git.x2erp.com/qdy/go-db/factory/database"
  5. "git.x2erp.com/qdy/go-svc-mcp/internal/mcp"
  6. )
  7. // 数据库配置键名常量(yaml配置键名)
  8. const (
  9. // BusinessDBKey 业务数据库键名
  10. BusinessDBKey = "business"
  11. // WarehouseDBKey 仓库数据库键名
  12. WarehouseDBKey = "warehouse"
  13. )
  14. // GetDBFactory 根据database_key获取数据库工厂
  15. // 如果database_key为空,返回主数据库工厂(deps.DBFactory)
  16. // 如果database_key不为空,通过DBSFactory创建对应的数据库工厂
  17. // database_key 必须是 BusinessDBKey 或 WarehouseDBKey 或空字符串
  18. func GetDBFactory(databaseKey string, deps *mcp.ToolDependencies) (*database.DBFactory, error) {
  19. if databaseKey == "" {
  20. if deps.DBFactory == nil {
  21. return nil, fmt.Errorf("主数据库工厂未初始化")
  22. }
  23. return deps.DBFactory, nil
  24. }
  25. // 验证database_key是否有效
  26. if !IsValidDatabaseKey(databaseKey) {
  27. return nil, fmt.Errorf("无效的数据库键名 '%s',只允许 '%s' 或 '%s'", databaseKey, BusinessDBKey, WarehouseDBKey)
  28. }
  29. if deps.DBSFactory == nil {
  30. return nil, fmt.Errorf("多数据库工厂未初始化,无法使用 database_key 参数")
  31. }
  32. // 通过DBSFactory创建对应的数据库工厂
  33. factory, err := deps.DBSFactory.CreateDBFactory(databaseKey)
  34. if err != nil {
  35. return nil, fmt.Errorf("创建数据库工厂 '%s' 失败: %v", databaseKey, err)
  36. }
  37. return factory, nil
  38. }
  39. // IsValidDatabaseKey 验证数据库配置键名是否有效
  40. // 有效键名必须是 BusinessDBKey 或 WarehouseDBKey
  41. func IsValidDatabaseKey(key string) bool {
  42. return key == BusinessDBKey || key == WarehouseDBKey
  43. }