Skip to content
Snippets Groups Projects
models.go 1.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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{})
    	return &DataHandler{db: db}
    }