Smail/server/db/init.go
Jinnrry 2660fc7b13
V2.4.7 (#112)
1、添加单测用例
2、mysql初始化bug修复
3、邮件删除bug修复
2024-04-30 14:43:37 +08:00

75 lines
1.3 KiB
Go

package db
import (
"fmt"
_ "github.com/go-sql-driver/mysql"
_ "modernc.org/sqlite"
"pmail/config"
"pmail/models"
"pmail/utils/context"
"pmail/utils/errors"
"xorm.io/xorm"
)
var Instance *xorm.Engine
func Init() error {
dsn := config.Instance.DbDSN
var err error
switch config.Instance.DbType {
case "mysql":
Instance, err = xorm.NewEngine("mysql", dsn)
case "sqlite":
Instance, err = xorm.NewEngine("sqlite", dsn)
default:
return errors.New("Database Type Error!")
}
if err != nil {
return errors.Wrap(err)
}
Instance.SetMaxOpenConns(100)
Instance.SetMaxIdleConns(10)
// 同步表结构
syncTables()
return nil
}
func WithContext(ctx *context.Context, sql string) string {
if ctx != nil {
logId := ctx.GetValue(context.LogID)
return fmt.Sprintf("/* %s */ %s", logId, sql)
}
return sql
}
func syncTables() {
err := Instance.Sync2(&models.User{})
if err != nil {
panic(err)
}
err = Instance.Sync2(&models.Email{})
if err != nil {
panic(err)
}
err = Instance.Sync2(&models.Group{})
if err != nil {
panic(err)
}
err = Instance.Sync2(&models.Rule{})
if err != nil {
panic(err)
}
err = Instance.Sync2(&models.UserAuth{})
if err != nil {
panic(err)
}
err = Instance.Sync2(&models.Sessions{})
if err != nil {
panic(err)
}
}