Files
2022-01-11 14:54:20 +08:00

122 lines
3.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package migrate
import (
"SciencesServer/app/common/migrate"
"SciencesServer/serve/orm"
"SciencesServer/serve/orm/logic"
"fmt"
"github.com/spf13/cobra"
"gopkg.in/yaml.v2"
"os"
"time"
)
type Config struct {
Debug bool `json:"debug" yaml:"debug"`
Mode string `json:"mode" yaml:"mode"`
MaxLifetime int `json:"max_lifetime" yaml:"max_lifetime"`
MaxOpenConns int `json:"max_open_conns" yaml:"max_open_conns"`
MaxIdleConns int `json:"max_idle_conns" yaml:"max_idle_conns"`
Engines map[string]interface{} `json:"engines" yaml:"engines"`
}
type Mysql struct {
Host string `yaml:"host"`
Port int `yaml:"port"`
Database string `yaml:"database"`
Username string `yaml:"username"`
Password string `yaml:"password"`
Parameters string `json:"parameters"`
}
type Sqlite struct {
Path string `yaml:"path"`
Name string `yaml:"name"`
}
var (
Cmd = &cobra.Command{
Use: "init",
Short: "初始化配置",
Example: "serve init -m mysql -d sciences -u root -p 123456",
Run: func(cmd *cobra.Command, args []string) {
run()
},
}
file string
mode string
_mysql = new(Mysql)
_sqlite = new(Sqlite)
)
func init() {
Cmd.PersistentFlags().StringVarP(&file, "file", "f", "./default_engine.yaml", "文件存储现支持yaml文件默认./default_engine.yaml")
Cmd.PersistentFlags().StringVarP(&mode, "mode", "m", "mysql", "数据引擎支持mysql和sqlite默认mysql")
Cmd.PersistentFlags().StringVarP(&_mysql.Host, "mysql_host", "H", "127.0.0.1", "主机名默认127.0.0.1")
Cmd.PersistentFlags().IntVarP(&_mysql.Port, "mysql_port", "P", 3306, "端口号默认为3306")
Cmd.PersistentFlags().StringVarP(&_mysql.Database, "mysql_database", "d", "", "数据库,默认为空")
Cmd.PersistentFlags().StringVarP(&_mysql.Username, "mysql_username", "u", "root", "用户名默认为root")
Cmd.PersistentFlags().StringVarP(&_mysql.Password, "mysql_password", "p", "", "密码,默认为空")
Cmd.PersistentFlags().StringVar(&_mysql.Parameters, "mysql_parameters", "charset=utf8mb4,utf8&parseTime=True&loc=Local", "附加参数")
Cmd.PersistentFlags().StringVarP(&_sqlite.Path, "sqlite_path", "a", "data", "Sqlite文件存放地址默认data")
Cmd.PersistentFlags().StringVarP(&_sqlite.Name, "sqlite_name", "n", "app.db", "Sqlite文件存放地址默认app.db")
}
func run() {
fmt.Println("========================\n=== 初始化项目配置 ===\n========================")
// 初始化数据引擎
engine := orm.NewInstance(
orm.WithDBMode(mode),
orm.WithMysqlOption(&logic.Mysql{
Host: _mysql.Host, Port: _mysql.Port,
Username: _mysql.Username, Password: _mysql.Password,
Database: _mysql.Database, Parameters: "charset=utf8mb4,utf8&parseTime=True&loc=Local",
}),
orm.WithSqliteOption(&logic.Sqlite{Path: _sqlite.Path, Name: _sqlite.Name}),
).Init()
time.Sleep(1 * time.Second)
fmt.Println("========================\n=== 数据引擎创建成功 ===\n========================")
time.Sleep(1 * time.Second)
// 迁移数据
migrate.NewInstance(migrate.WithGormDBOption(engine.Engine)).Handle()
if err := saveFile(file, &Config{
Debug: true,
Mode: mode,
MaxLifetime: 3600,
MaxOpenConns: 2000,
MaxIdleConns: 1000,
Engines: map[string]interface{}{
"mysql": _mysql,
"sqlite": _sqlite,
},
}); err != nil {
fmt.Errorf("数据初始化文件错误:%v", err)
return
}
time.Sleep(1 * time.Second)
fmt.Println("========================\n=== 数据初始化完成 ===\n========================")
}
func saveFile(_file string, data *Config) error {
file, err := os.OpenFile(_file, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
if err != nil {
return err
}
defer file.Close()
enc := yaml.NewEncoder(file)
err = enc.Encode(data)
return err
}