55 lines
1.0 KiB
Go
55 lines
1.0 KiB
Go
package repositories
|
|
|
|
import (
|
|
"github.com/HouzuoGuo/tiedot/db"
|
|
"github.com/astaxie/beego"
|
|
"sync"
|
|
)
|
|
|
|
var (
|
|
_dbInstance *db.DB
|
|
once sync.Once
|
|
)
|
|
|
|
func createCollection(name string, ix ...interface{}) *db.Col {
|
|
log := false
|
|
if dbInstance().Use(name) == nil {
|
|
if err := dbInstance().Create(name); err != nil {
|
|
beego.Error(err)
|
|
}
|
|
log = true
|
|
}
|
|
|
|
col := dbInstance().Use(name)
|
|
|
|
createIndex(col, []string{"Id"}, log)
|
|
for _, i := range ix {
|
|
switch i := i.(type) {
|
|
case string:
|
|
createIndex(col, []string{i}, log)
|
|
case []string:
|
|
createIndex(col, i, log)
|
|
default:
|
|
beego.Error("Trying to create an Index with an invalid type: ", i)
|
|
}
|
|
}
|
|
return col
|
|
}
|
|
|
|
func createIndex(col *db.Col, path []string, log bool) (err error) {
|
|
if err := col.Index(path); err != nil && log {
|
|
beego.Error(path, err)
|
|
}
|
|
return err
|
|
}
|
|
|
|
func dbInstance() *db.DB {
|
|
once.Do(func() {
|
|
instance, err := db.OpenDB(beego.AppConfig.String("dbPath"))
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
_dbInstance = instance
|
|
})
|
|
return _dbInstance
|
|
} |