You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
1.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package dbm
import (
"fmt"
"github.com/han-joker/moo-layout/api/moo/confm"
"github.com/han-joker/moo-layout/api/moo/logm"
"github.com/han-joker/moo-layout/api/moo/toolm"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
const defaultType = "sqlite"
type DSN = string
var pool = map[DSN]*gorm.DB{}
type Option struct {
DSN
Options []gorm.Option
}
// New 创建对象
func New(options ...Option) *gorm.DB {
option := verifyOption(options)
return create(option)
}
// Get 存在直接返回,否则创建、存储再返回
func Get(options ...Option) *gorm.DB {
option := verifyOption(options)
if !Has(option.DSN) {
pool[option.DSN] = create(option)
}
return pool[option.DSN]
}
func verifyOption(options []Option) Option {
t := toolm.StringDefault(confm.Get().String("app.databaseType"), defaultType)
option := Option{
DSN: confm.Get().String(fmt.Sprintf("%s.DSN", t)),
Options: []gorm.Option{},
}
if len(options) > 0 {
if options[0].DSN != "" {
option.DSN = options[0].DSN
}
if options[0].Options != nil {
option.Options = options[0].Options
}
}
return option
}
// Has 存在返回 true否则返回 false
func Has(dialector DSN) bool {
_, has := pool[dialector]
return has && pool[dialector] != nil
}
func create(option Option) *gorm.DB {
db, err := gorm.Open(sqlite.Open(option.DSN), option.Options...)
if err != nil {
logm.Get().Error(err)
}
return db
}