refactor: merge tenant configuration into tenant registry
This commit is contained in:
@@ -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 != "" {
|
||||
|
||||
Reference in New Issue
Block a user