|
@@ -8,9 +8,14 @@ import (
|
|
"gorm.io/gen"
|
|
"gorm.io/gen"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
"gorm.io/gorm/logger"
|
|
|
|
+ "jollia.cn/jolib/jokode"
|
|
"strings"
|
|
"strings"
|
|
)
|
|
)
|
|
|
|
|
|
|
|
+const (
|
|
|
|
+ defCfgFilePath = "conf/db.yaml"
|
|
|
|
+)
|
|
|
|
+
|
|
type GenService struct {
|
|
type GenService struct {
|
|
dbInstance *gorm.DB
|
|
dbInstance *gorm.DB
|
|
}
|
|
}
|
|
@@ -20,13 +25,96 @@ func (s *GenService) Init() error {
|
|
flag.Parse()
|
|
flag.Parse()
|
|
}
|
|
}
|
|
|
|
|
|
- if dbConfigInstance.IsZero() {
|
|
|
|
|
|
+ var (
|
|
|
|
+ dbCfg *DbConfig
|
|
|
|
+ cfgFilePath string
|
|
|
|
+ force bool
|
|
|
|
+ )
|
|
|
|
+
|
|
|
|
+ if cfgFilePathFlag != "" {
|
|
|
|
+ cfgFilePath = cfgFilePathFlag
|
|
|
|
+ force = true
|
|
|
|
+ } else {
|
|
|
|
+ cfgFilePath = defCfgFilePath
|
|
|
|
+ force = false
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ if cfg, err := loadConfigFromFile(cfgFilePath, force); err != nil {
|
|
|
|
+ return errors.Wrapf(err, "try load db config from file '%s' fail", cfgFilePath)
|
|
|
|
+ } else if cfg == nil {
|
|
|
|
+ return errors.New("load db config returns nil")
|
|
|
|
+ } else {
|
|
|
|
+ dbCfg = cfg
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if !dbConfigFlag.IsZero() {
|
|
|
|
+ if dbConfigFlag.Host != "" {
|
|
|
|
+ dbCfg.Host = dbConfigFlag.Host
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if dbConfigFlag.Port != 0 {
|
|
|
|
+ dbCfg.Port = dbConfigFlag.Port
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if dbConfigFlag.Schema != "" {
|
|
|
|
+ dbCfg.Schema = dbConfigFlag.Schema
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if dbConfigFlag.User != "" {
|
|
|
|
+ dbCfg.User = dbConfigFlag.User
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if dbConfigFlag.Pwd != "" {
|
|
|
|
+ dbCfg.Pwd = dbConfigFlag.Pwd
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := s.initDatabase(dbCfg); err != nil {
|
|
|
|
+ return errors.Wrap(err, "try init database fail")
|
|
}
|
|
}
|
|
|
|
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (s *GenService) initDatabase(dbCfg *DbConfig) error {
|
|
|
|
+ if dbCfg == nil {
|
|
|
|
+ return errors.New("can not init database with nil db config")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if err := dbCfg.FixDefaultValues(); err != nil {
|
|
|
|
+ return errors.Wrap(err, "try fix default values of database config fail")
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
|
|
+ dbCfg.User,
|
|
|
|
+ dbCfg.Pwd,
|
|
|
|
+ dbCfg.Host,
|
|
|
|
+ dbCfg.Port,
|
|
|
|
+ dbCfg.Schema)
|
|
|
|
+
|
|
|
|
+ if db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
|
|
|
|
+ Logger: logger.Default.LogMode(logger.Info),
|
|
|
|
+ }); err != nil {
|
|
|
|
+ return errors.Wrapf(err, "try open database with dsn '%s' fail", dsn)
|
|
|
|
+ } else {
|
|
|
|
+ s.dbInstance = db
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return nil
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func loadConfigFromFile(filePath string, force bool) (*DbConfig, error) {
|
|
|
|
+ cfg := &DbConfig{}
|
|
|
|
+
|
|
|
|
+ if err := jokode.LoadConfigFromFile(cfg, filePath); err != nil {
|
|
|
|
+ if force {
|
|
|
|
+ return nil, errors.Wrapf(err, "try load config from file '%s' fail", filePath)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return cfg, nil
|
|
|
|
+}
|
|
|
|
+
|
|
func (s *GenService) Start() error {
|
|
func (s *GenService) Start() error {
|
|
if s.dbInstance == nil {
|
|
if s.dbInstance == nil {
|
|
return errors.New("try start gen service with nil database instance")
|
|
return errors.New("try start gen service with nil database instance")
|
|
@@ -76,30 +164,3 @@ func (s *GenService) GetName() string {
|
|
func (s *GenService) GetInitOrder() int {
|
|
func (s *GenService) GetInitOrder() int {
|
|
return 0
|
|
return 0
|
|
}
|
|
}
|
|
-
|
|
|
|
-func (s *GenService) initDatabase(dbCfg *DbConfig) error {
|
|
|
|
- if dbCfg == nil {
|
|
|
|
- return errors.New("can not init database with nil db config")
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if err := dbCfg.FixDefaultValues(); err != nil {
|
|
|
|
- return errors.Wrap(err, "try fix default values of database config fail")
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
|
|
- dbCfg.User,
|
|
|
|
- dbCfg.Pwd,
|
|
|
|
- dbCfg.Host,
|
|
|
|
- dbCfg.Port,
|
|
|
|
- dbCfg.Schema)
|
|
|
|
-
|
|
|
|
- if db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{
|
|
|
|
- Logger: logger.Default.LogMode(logger.Info),
|
|
|
|
- }); err != nil {
|
|
|
|
- return errors.Wrapf(err, "try open database with dsn '%s' fail", dsn)
|
|
|
|
- } else {
|
|
|
|
- s.dbInstance = db
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return nil
|
|
|
|
-}
|
|
|