/
gorm.go
53 lines (43 loc) · 1012 Bytes
/
gorm.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
package gorm
import (
"context"
"github.com/go-saas/saas"
"github.com/go-saas/saas/data"
"gorm.io/gorm"
)
// MultiTenancy entity
type MultiTenancy struct {
TenantId HasTenant `gorm:"index"`
}
type DbProvider saas.DbProvider[*gorm.DB]
type ClientProvider saas.ClientProvider[*gorm.DB]
type ClientProviderFunc saas.ClientProviderFunc[*gorm.DB]
func (c ClientProviderFunc) Get(ctx context.Context, dsn string) (*gorm.DB, error) {
return c(ctx, dsn)
}
func NewDbProvider(cs data.ConnStrResolver, cp ClientProvider) DbProvider {
return saas.NewDbProvider[*gorm.DB](cs, cp)
}
type DbWrap struct {
*gorm.DB
}
// NewDbWrap wrap gorm.DB into io.Close
func NewDbWrap(db *gorm.DB) *DbWrap {
return &DbWrap{db}
}
func (d *DbWrap) Close() error {
return closeDb(d.DB)
}
func closeDb(d *gorm.DB) error {
sqlDB, err := d.DB()
if err != nil {
return err
}
cErr := sqlDB.Close()
if cErr != nil {
//todo logging
//logger.Errorf("Gorm db close error: %s", err.Error())
return cErr
}
return nil
}