Files
sale/backend/internal/utils/database.go
T
admin 3a898e8aa0 fix: 全面修复项目问题
后端修复:
- 验证码存储与校验机制
- 订单创建事务+库存扣减
- GetStats字段名错误
- VerifyEmail改为POST
- 供应商更新字段白名单
- 文件删除安全检查
- 抽奖安全随机数
- 用户管理CRUD
- 订单取消/确认收货
- 工单回复
- Toggle返回新数据
- 移除死代码

前端修复:
- 404兜底路由
- 401软跳转
- API层统一
- 面包屑补充banners
- 国际化完善
- 购物车并行删除
- 退出清理购物车
- 供应商Dashboard数据
- 工单详情页
- 订单取消/确认收货
2026-05-06 09:55:01 +08:00

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")
}