package models import ( "fmt" "github.com/glebarez/sqlite" "gorm.io/driver/mysql" "gorm.io/gorm" "gorm.io/gorm/schema" "log" "message-nest/pkg/setting" "message-nest/pkg/util" ) var db *gorm.DB type IDModel struct { ID uint `gorm:"autoIncrement;type:integer;primaryKey" json:"id"` CreatedBy string `json:"created_by" gorm:"type:varchar(100) ;default:'';"` ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) ;default:'';"` CreatedAt util.Time `json:"created_on" gorm:"column:created_on;autoCreateTime "` UpdatedAt util.Time `json:"modified_on" gorm:"column:modified_on;autoUpdateTime ;"` } type UUIDModel struct { ID string `gorm:"type:varchar(12) ;primaryKey" json:"id"` CreatedBy string `json:"created_by" gorm:"type:varchar(100) ;default:'';"` ModifiedBy string `json:"modified_by" gorm:"type:varchar(100) ;default:'';"` CreatedAt util.Time `json:"created_on" gorm:"column:created_on;autoCreateTime "` UpdatedAt util.Time `json:"modified_on" gorm:"column:modified_on;autoUpdateTime ;"` } // Setup initializes the database instance func Setup() *gorm.DB { var err error config := &gorm.Config{ NamingStrategy: schema.NamingStrategy{ TablePrefix: setting.DatabaseSetting.TablePrefix, SingularTable: true, }, } switch setting.DatabaseSetting.Type { case "mysql": connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local", setting.DatabaseSetting.User, setting.DatabaseSetting.Password, setting.DatabaseSetting.Host, setting.DatabaseSetting.Port, setting.DatabaseSetting.Name) if setting.DatabaseSetting.Ssl != "false" { connStr += fmt.Sprintf("&tls=%s", setting.DatabaseSetting.Ssl) } db, err = gorm.Open(mysql.Open(connStr), config) case "tidb": connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=true", setting.DatabaseSetting.User, setting.DatabaseSetting.Password, setting.DatabaseSetting.Host, setting.DatabaseSetting.Port, setting.DatabaseSetting.Name) if setting.DatabaseSetting.Ssl != "false" { connStr += fmt.Sprintf("&tls=%s", setting.DatabaseSetting.Ssl) } db, err = gorm.Open(mysql.Open(connStr), config) case "sqlite": db, err = gorm.Open(sqlite.Open("conf/database.db"), config) } if err != nil { log.Fatalf("models.Setup err: %v", err) } if setting.DatabaseSetting.SqlDebug == "enable" { db = db.Debug() } return db } func GetSchema(table any) string { stmt := &gorm.Statement{DB: db} stmt.Parse(table) return stmt.Schema.Table }