refactor: merge tenant configuration into tenant registry

This commit is contained in:
richjohnrambo
2026-09-22 16:47:40 +08:00
parent 851eca97ed
commit 85b564e2ac
22 changed files with 216 additions and 634 deletions
+6 -34
View File
@@ -20,6 +20,7 @@ import (
var tenantDbGroups sync.Map
const registryDbGroup = "imRegistry"
const sharedBusinessDatabase = "meeting_im"
var registryDbGroupOnce sync.Once
@@ -47,19 +48,15 @@ func DB(ctx context.Context, tenantId int64) (db gdb.DB, tenant *entity.ImTenant
// Tenant isolation inside this database is implemented by tenant_id predicates
// and the three tenant-partitioned high-volume table families.
func SharedDB(ctx context.Context) (gdb.DB, error) {
var sharedTenant *entity.ImTenant
if err := RegistryDB().Model(dao.ImTenant.Table()).Safe().Ctx(ctx).
Where(dao.ImTenant.Columns().Code, "default").Scan(&sharedTenant); err != nil {
return nil, gerror.Wrap(err, "获取共享业务库配置失败")
defaultLink := defaultDbLink(ctx)
if defaultLink == "" {
return nil, gerror.New("默认数据库连接未配置,无法连接共享业务库")
}
if sharedTenant == nil || sharedTenant.Id <= 0 {
return nil, gerror.New("默认商户不存在,无法确定共享业务库")
}
link, err := tenantLink(ctx, sharedTenant)
link, err := replaceMySQLDatabase(defaultLink, sharedBusinessDatabase)
if err != nil {
return nil, err
}
return dbForLink(link, sharedTenant.Id)
return dbForLink(link, 0)
}
func dbForLink(link string, ownerID int64) (gdb.DB, error) {
@@ -111,31 +108,6 @@ func ensureRegistryDBGroup() {
_ = gdb.SetConfigGroup(registryDbGroup, cloned)
}
func tenantLink(ctx context.Context, tenant *entity.ImTenant) (string, error) {
if tenant.DbDsn != "" {
return normalizeMySQLTimeOptions(tenant.DbDsn)
}
if tenant.DbName == "" {
// 未配置独立业务库的商户回落共享默认库
defaultLink := defaultDbLink(ctx)
if defaultLink == "" {
return "", gerror.New("默认数据库连接未配置,无法回落共享业务库")
}
return normalizeMySQLTimeOptions(defaultLink)
}
defaultLink := defaultDbLink(ctx)
if defaultLink == "" {
return "", gerror.New("默认数据库连接未配置,无法推导租户业务库连接")
}
link, err := replaceMySQLDatabase(defaultLink, tenant.DbName)
if err != nil {
return "", err
}
return link, nil
}
func defaultDbLink(ctx context.Context) string {
if configs, err := gdb.GetConfigGroup("default"); err == nil && len(configs) > 0 {
if configs[0].Link != "" {