123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package services
- import (
- "flag"
- "fmt"
- "github.com/pkg/errors"
- "gorm.io/driver/mysql"
- "gorm.io/gen"
- "gorm.io/gorm"
- "gorm.io/gorm/logger"
- "strings"
- )
- type GenService struct {
- dbInstance *gorm.DB
- }
- func (s *GenService) Init() error {
- if !flag.Parsed() {
- flag.Parse()
- }
- if dbConfigInstance.IsZero() {
- }
- return nil
- }
- func (s *GenService) Start() error {
- if s.dbInstance == nil {
- return errors.New("try start gen service with nil database instance")
- }
- g := gen.NewGenerator(gen.Config{
- OutPath: "po",
- OutFile: "po",
- ModelPkgPath: "po",
- WithUnitTest: false,
- FieldNullable: true,
- FieldCoverable: true,
- FieldSignable: true,
- FieldWithIndexTag: true,
- FieldWithTypeTag: true,
- Mode: gen.WithDefaultQuery | gen.WithQueryInterface,
- })
- g.WithDataTypeMap(map[string]func(columnType gorm.ColumnType) (dataType string){
- "tinyint": func(filedType gorm.ColumnType) string {
- if ct, ok := filedType.ColumnType(); ok {
- if strings.HasPrefix(strings.ToLower(ct), "tinyint(1)") {
- return "int8"
- }
- return "int16"
- } else {
- return "int32"
- }
- },
- })
- g.UseDB(s.dbInstance)
- g.GenerateAllTable()
- g.Execute()
- return nil
- }
- func (s *GenService) Stop() {
- // do nothing
- }
- func (s *GenService) GetName() string {
- return "GenService"
- }
- func (s *GenService) GetInitOrder() int {
- 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
- }
|