3a898e8aa0
后端修复: - 验证码存储与校验机制 - 订单创建事务+库存扣减 - GetStats字段名错误 - VerifyEmail改为POST - 供应商更新字段白名单 - 文件删除安全检查 - 抽奖安全随机数 - 用户管理CRUD - 订单取消/确认收货 - 工单回复 - Toggle返回新数据 - 移除死代码 前端修复: - 404兜底路由 - 401软跳转 - API层统一 - 面包屑补充banners - 国际化完善 - 购物车并行删除 - 退出清理购物车 - 供应商Dashboard数据 - 工单详情页 - 订单取消/确认收货
81 lines
1.7 KiB
Go
81 lines
1.7 KiB
Go
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
|
|
"sale/internal/config"
|
|
"sale/internal/models"
|
|
|
|
sqlite "github.com/glebarez/sqlite"
|
|
"gorm.io/driver/mysql"
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
"gorm.io/gorm/logger"
|
|
)
|
|
|
|
var DB *gorm.DB
|
|
|
|
func InitDB() {
|
|
var err error
|
|
cfg := config.AppConfig.Database
|
|
|
|
switch cfg.Driver {
|
|
case "mysql":
|
|
dsn := fmt.Sprintf(
|
|
"%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
|
|
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.DBName,
|
|
)
|
|
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
})
|
|
case "postgres":
|
|
dsn := fmt.Sprintf(
|
|
"host=%s port=%s user=%s password=%s dbname=%s sslmode=%s",
|
|
cfg.Host, cfg.Port, cfg.User, cfg.Password, cfg.DBName, cfg.SSLMode,
|
|
)
|
|
DB, err = gorm.Open(postgres.Open(dsn), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
})
|
|
default:
|
|
DB, err = gorm.Open(sqlite.Open(cfg.FilePath), &gorm.Config{
|
|
Logger: logger.Default.LogMode(logger.Info),
|
|
})
|
|
}
|
|
|
|
if err != nil {
|
|
log.Fatalf("Failed to connect to database: %v", err)
|
|
}
|
|
|
|
log.Printf("Database connected successfully (driver: %s)", cfg.Driver)
|
|
}
|
|
|
|
func AutoMigrate() {
|
|
err := DB.AutoMigrate(
|
|
&models.User{},
|
|
&models.Category{},
|
|
&models.Brand{},
|
|
&models.Product{},
|
|
&models.ProductCustomField{},
|
|
&models.Inventory{},
|
|
&models.Cart{},
|
|
&models.Order{},
|
|
&models.OrderItem{},
|
|
&models.Address{},
|
|
&models.Lottery{},
|
|
&models.LotteryPrize{},
|
|
&models.LotteryParticipant{},
|
|
&models.LotteryWinner{},
|
|
&models.Ticket{},
|
|
&models.SystemSetting{},
|
|
&models.SupplierAuthorization{},
|
|
&models.Article{},
|
|
&models.Banner{},
|
|
)
|
|
if err != nil {
|
|
log.Fatalf("Failed to migrate database: %v", err)
|
|
}
|
|
|
|
log.Println("Database migrated successfully")
|
|
}
|