init.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package db
  2. import (
  3. "fmt"
  4. _ "github.com/go-sql-driver/mysql"
  5. _ "modernc.org/sqlite"
  6. "pmail/config"
  7. "pmail/models"
  8. "pmail/utils/context"
  9. "pmail/utils/errors"
  10. "xorm.io/xorm"
  11. )
  12. var Instance *xorm.Engine
  13. func Init() error {
  14. dsn := config.Instance.DbDSN
  15. var err error
  16. switch config.Instance.DbType {
  17. case "mysql":
  18. Instance, err = xorm.NewEngine("mysql", dsn)
  19. case "sqlite":
  20. Instance, err = xorm.NewEngine("sqlite", dsn)
  21. default:
  22. return errors.New("Database Type Error!")
  23. }
  24. if err != nil {
  25. return errors.Wrap(err)
  26. }
  27. Instance.SetMaxOpenConns(100)
  28. Instance.SetMaxIdleConns(10)
  29. // 同步表结构
  30. syncTables()
  31. return nil
  32. }
  33. func WithContext(ctx *context.Context, sql string) string {
  34. if ctx != nil {
  35. logId := ctx.GetValue(context.LogID)
  36. return fmt.Sprintf("/* %s */ %s", logId, sql)
  37. }
  38. return sql
  39. }
  40. func syncTables() {
  41. err := Instance.Sync2(&models.User{})
  42. if err != nil {
  43. panic(err)
  44. }
  45. err = Instance.Sync2(&models.Email{})
  46. if err != nil {
  47. panic(err)
  48. }
  49. err = Instance.Sync2(&models.Group{})
  50. if err != nil {
  51. panic(err)
  52. }
  53. err = Instance.Sync2(&models.Rule{})
  54. if err != nil {
  55. panic(err)
  56. }
  57. err = Instance.Sync2(&models.UserAuth{})
  58. if err != nil {
  59. panic(err)
  60. }
  61. err = Instance.Sync2(&models.Sessions{})
  62. if err != nil {
  63. panic(err)
  64. }
  65. }