-
-
Notifications
You must be signed in to change notification settings - Fork 38
/
tenant-provider.go
67 lines (57 loc) · 1.66 KB
/
tenant-provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package saas
import (
"context"
"errors"
"github.com/go-saas/saas"
"github.com/go-saas/saas/data"
sgorm "github.com/go-saas/saas/gorm"
"gorm.io/gorm"
"github.com/Dev4w4n/e-masjid.my/saas/model"
"github.com/Dev4w4n/e-masjid.my/saas/utils"
)
type TenantStore struct {
DbProvider sgorm.DbProvider
}
var _ saas.TenantStore = (*TenantStore)(nil)
var ConnStrGen saas.ConnStrGenerator
var ConnStrResolver data.ConnStrResolver
var TenantStorage *TenantStore
func InitSaas(sharedDsn string) {
InitCache()
InitConnStrResolver(sharedDsn)
InitConnStrGenerator(sharedDsn)
TenantStorage = &TenantStore{
DbProvider: sgorm.NewDbProvider(ConnStrResolver, NewClientProvider()),
}
InitDbProvider()
}
func InitConnStrResolver(sharedDsn string) {
conn := make(data.ConnStrings, 1)
//default database
conn.SetDefault(sharedDsn)
ConnStrResolver = conn
}
func InitConnStrGenerator(sharedDsn string) {
suffix := "%s"
modifiedDSN := utils.AddSuffixToDBName(sharedDsn, suffix)
ConnStrGen = saas.NewConnStrGenerator(modifiedDSN)
}
func (t *TenantStore) GetByNameOrId(ctx context.Context, nameOrId string) (*saas.TenantConfig, error) {
//change to host side
ctx = saas.NewCurrentTenant(ctx, "", "")
db := t.DbProvider.Get(ctx, "")
var tenant model.Tenant
err := db.Model(&model.Tenant{}).Preload("Conn").Where("id = ? OR name = ?", nameOrId, nameOrId).First(&tenant).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return nil, saas.ErrTenantNotFound
} else {
return nil, err
}
}
ret := saas.NewTenantConfig(tenant.ID, tenant.Name, tenant.KeycloakClientId, "")
for _, conn := range tenant.Conn {
ret.Conn[conn.Key] = conn.Value
}
return ret, nil
}