Files

87 lines
2.5 KiB
Go
Raw Permalink Normal View History

2023-12-30 17:40:20 +08:00
package models
import (
"fmt"
2024-04-29 17:31:13 +08:00
"github.com/glebarez/sqlite"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"gorm.io/gorm/schema"
2023-12-30 17:40:20 +08:00
"log"
"message-nest/pkg/setting"
"message-nest/pkg/util"
)
var db *gorm.DB
2023-12-31 21:31:56 +08:00
type IDModel struct {
2024-04-29 17:31:13 +08:00
ID uint `gorm:"autoIncrement;type:integer;primaryKey" json:"id"`
2023-12-31 21:31:56 +08:00
2024-04-29 17:31:13 +08:00
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 ;"`
2023-12-31 21:31:56 +08:00
}
2023-12-30 17:40:20 +08:00
type UUIDModel struct {
2024-04-29 17:31:13 +08:00
ID string `gorm:"type:varchar(12) ;primaryKey" json:"id"`
2023-12-30 17:40:20 +08:00
2024-04-29 17:31:13 +08:00
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 ;"`
2023-12-30 17:40:20 +08:00
}
// Setup initializes the database instance
2024-01-07 21:30:59 +08:00
func Setup() *gorm.DB {
2023-12-30 17:40:20 +08:00
var err error
2024-04-29 17:31:13 +08:00
config := &gorm.Config{
NamingStrategy: schema.NamingStrategy{
2024-04-29 17:46:03 +08:00
TablePrefix: setting.DatabaseSetting.TablePrefix,
SingularTable: true,
2024-04-29 17:31:13 +08:00
},
}
switch setting.DatabaseSetting.Type {
case "mysql":
2025-04-28 18:06:20 +08:00
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":
2025-04-28 19:14:46 +08:00
connStr := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=true",
2025-04-28 18:06:20 +08:00
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)
}
2024-04-29 17:31:13 +08:00
db, err = gorm.Open(mysql.Open(connStr), config)
case "sqlite":
db, err = gorm.Open(sqlite.Open("conf/database.db"), config)
}
2023-12-30 17:40:20 +08:00
if err != nil {
log.Fatalf("models.Setup err: %v", err)
}
2024-01-07 00:25:35 +08:00
if setting.DatabaseSetting.SqlDebug == "enable" {
2024-04-29 17:31:13 +08:00
db = db.Debug()
2024-01-07 00:25:35 +08:00
}
2024-01-07 21:30:59 +08:00
return db
2023-12-30 17:40:20 +08:00
}
2024-04-29 17:31:13 +08:00
func GetSchema(table any) string {
stmt := &gorm.Statement{DB: db}
stmt.Parse(table)
return stmt.Schema.Table
2023-12-30 17:40:20 +08:00
}