You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
package database
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"health-ai/internal/config"
|
|
|
|
"gorm.io/driver/sqlite"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func InitDatabase(cfg *config.DatabaseConfig) error {
|
|
var err error
|
|
|
|
gormConfig := &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
}
|
|
|
|
switch cfg.Driver {
|
|
case "sqlite":
|
|
DB, err = gorm.Open(sqlite.Open(cfg.SQLite.Path), gormConfig)
|
|
case "postgres":
|
|
// TODO: 添加 PostgreSQL 支持
|
|
// dsn := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
|
|
// cfg.Postgres.Host, cfg.Postgres.Port, cfg.Postgres.User, cfg.Postgres.Password, cfg.Postgres.DBName)
|
|
// DB, err = gorm.Open(postgres.Open(dsn), gormConfig)
|
|
return fmt.Errorf("postgres driver not implemented yet")
|
|
case "mysql":
|
|
// TODO: 添加 MySQL 支持
|
|
// dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
// cfg.MySQL.User, cfg.MySQL.Password, cfg.MySQL.Host, cfg.MySQL.Port, cfg.MySQL.DBName)
|
|
// DB, err = gorm.Open(mysql.Open(dsn), gormConfig)
|
|
return fmt.Errorf("mysql driver not implemented yet")
|
|
default:
|
|
return fmt.Errorf("unsupported database driver: %s", cfg.Driver)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func AutoMigrate(models ...interface{}) error {
|
|
return DB.AutoMigrate(models...)
|
|
}
|
|
|
|
func GetDB() *gorm.DB {
|
|
return DB
|
|
}
|
|
|