package dao import ( "StuAcaWorksAI/proto" "fmt" "gorm.io/driver/mysql" "gorm.io/driver/postgres" "gorm.io/gorm" "gorm.io/gorm/logger" "log" "os" "time" ) var DB *gorm.DB func Init() error { var db *gorm.DB var err error var dsn string logger := logger.New( log.New(os.Stdout, "\r\n", log.LstdFlags), // 日志输出到标准输出 logger.Config{ SlowThreshold: time.Millisecond * 500, // 慢查询阈值设置为 500ms LogLevel: logger.Info, // 日志级别设置为 Info,记录慢查询信息 Colorful: true, // 启用日志颜色显示 }, ) if proto.Config.DB == 0 { dsn = proto.Config.MYSQL_DSN db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{ Logger: logger, }) } else if proto.Config.DB == 1 { dsn = proto.Config.PG_DSN db, err = gorm.Open(postgres.Open(dsn), &gorm.Config{ Logger: logger, }) } if err != nil { panic("failed to connect database") return err } err = db.AutoMigrate(&User{}) if err != nil { fmt.Println("user table:", err) return err } // 自动迁移,创建表,如果表已经存在,会自动更新表结构,不会删除表,只会创建不存在的表 err = db.AutoMigrate(&File{}) if err != nil { fmt.Println("file table:", err) } err = db.AutoMigrate(&Logger{}) if err != nil { fmt.Println("logger table:", err) return err } err = db.AutoMigrate(&ConfigFile{}) if err != nil { fmt.Println("config file table:", err) return err } err = db.AutoMigrate(&FileAuth{}) if err != nil { fmt.Println("file auth table:", err) return err } err = db.AutoMigrate(&FileContent{}) if err != nil { fmt.Println("file content table:", err) return err } err = db.AutoMigrate(&KnowledgeBase{}) if err != nil { fmt.Println("knowledge base table:", err) return err } err = db.AutoMigrate(&Model{}) if err != nil { fmt.Println("model table:", err) return err } err = db.AutoMigrate(&FunctionModel{}) if err != nil { log.Println("function model table:", err) return err } err = db.AutoMigrate(&ModelToken{}) if err != nil { fmt.Println("model token table:", err) return err } err = db.AutoMigrate(&Session{}) if err != nil { fmt.Println("session table:", err) return err } err = db.AutoMigrate(&Message{}) if err != nil { fmt.Println("message table:", err) return err } err = db.AutoMigrate(&ThirdPartyUserInfo{}) if err != nil { fmt.Println("third party user info table:", err) return err } err = db.AutoMigrate(&AIStreamMsg{}) if err != nil { fmt.Println("ai stream message table:", err) return err } DB = db return err } func Close() { sqlDB, err := DB.DB() if err != nil { panic("failed to connect database") } sqlDB.Close() }