github.com/artisanhe/tools@v1.0.1-0.20210607022958-19a8fef2eb04/mysql/db_table.go (about)

     1  package mysql
     2  
     3  import (
     4  	"reflect"
     5  
     6  	"github.com/sirupsen/logrus"
     7  
     8  	"github.com/artisanhe/gorm"
     9  
    10  	"github.com/artisanhe/tools/env"
    11  )
    12  
    13  type Model interface {
    14  	TableName() string
    15  }
    16  
    17  func NewDBTable() *DBTable {
    18  	return &DBTable{}
    19  }
    20  
    21  type DBTable struct {
    22  	Name string
    23  	list []Model
    24  }
    25  
    26  func (dbTable *DBTable) SetName(name string) {
    27  	dbTable.Name = name
    28  }
    29  
    30  func (dbTable *DBTable) Register(model Model) {
    31  	rv := reflect.ValueOf(model)
    32  	if rv.Elem().Kind() != reflect.Struct || rv.Kind() != reflect.Ptr || rv.IsNil() {
    33  		panic("register model failed")
    34  	}
    35  	dbTable.list = append(dbTable.list, model)
    36  }
    37  
    38  func (dbTable *DBTable) AutoMigrate(db *gorm.DB) (err error) {
    39  	goEnv := env.GetRuntimeEnv()
    40  
    41      if goEnv == env.ONLINE || goEnv == env.PRE {
    42          // nothing
    43          //return nil
    44      }
    45  
    46  	for _, model := range dbTable.list {
    47  		err := db.AutoMigrate(model).Error
    48  		if err != nil {
    49  			logrus.Errorf("%s automigrate error[%s]", model, err.Error())
    50  		}
    51  	}
    52  
    53  	return nil
    54  }