package models import ( "fmt" "forge.grandlyon.com/web-et-numerique/llle_project/backoffice-server/internal/common" "gorm.io/driver/mysql" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type DataHandler struct { db *gorm.DB } var ( dbUser = common.StringValueFromEnv("DATABASE_USER", "") dbPassword = common.StringValueFromEnv("DATABASE_PASSWORD", "") dbName = common.StringValueFromEnv("DATABASE_NAME", "") dbHost = common.StringValueFromEnv("DATABASE_HOST", "") ) // NewDataHandler init a DataHandler and returns a pointer to it func NewDataHandler() *DataHandler { var db *gorm.DB var err error if dbUser == "" || dbPassword == "" || dbName == "" { db, err = gorm.Open(sqlite.Open("backoffice.db"), &gorm.Config{}) if err != nil { panic("failed to connect database") } } else { dsn := fmt.Sprintf("%v:%v@tcp(%v:3306)/%v?charset=utf8mb4&parseTime=True&loc=Local", dbUser, dbPassword, dbHost, dbName) db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("failed to connect database") } } // Migrate the schema db.AutoMigrate(&MonthlyInfo{}) db.AutoMigrate(&MonthlyNews{}) db.AutoMigrate(&Poll{}) db.AutoMigrate(&PartnersInfo{}) // Create default partner status db.Create(&PartnersInfo{ GRDFFailure: false, EnedisFailure: false, EGLFailure: false, NotificationActivated: false, }) return &DataHandler{db: db} }